-
Mémo Context manager : Environnement Django
Recreate Django environment with context manager
Je tombe à chaque fois sur cette erreur en scriptant rapidement une opération rapide en environnement Django, par exemple, une requête en base de données :
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
Woopsie!
Rien de tel qu'un context manager pour faire un petit patch.
class DjangoEnvironment: def __init__(self, application): self.application = application def __enter__(self): print(f"Setup Django environment with app {self.application}") import os import django os.environ.setdefault("DJANGO_SETTINGS_MODULE", self.application) django.setup() return self def __exit__(self, exc_type, exc_val, exc_tb): print(f"Quit Django environment with app {self.application}") del self with DjangoEnvironment("AppScraper.settings.production") as env: from books.models import Book book = Book.objects.get(pk=1) print(f"Title: {book.title}")
En sortie :
Setup Django environment with app app.settings.production Title: Hello, World! Quit Django environment with app app.settings.production