Ich habe setup_environ()
eine Weile zurück, um ein einmaliges Python-Skript zu schreiben, das von der Befehlszeile ausgeführt wurde, die wirklich nicht sehr gut als ein benutzerdefinierter manage.py-Befehl passte (meine bevorzugte Wahl). Es hat alles schön eingerichtet. Ich nehme an, wir haben diese Funktion aufgegeben, weil Nicht-Django-Pythonistas sich über Djangonauts für magisches Zeug wie dieses lustig machen und wir es satt haben, uns schmutzig zu fühlen. Also, wenn es veraltet ist, was ist die Alternative? Vielleicht ist das eine faule Frage, aber was muss ich anstelle von setup_environ ausführen, um denselben Effekt zu erzielen? Ich denke, ich könnte die Funktion in mein Skript kopieren/einfügen, aber ich gehe davon aus, dass das nicht der Zweck war, sie abzulehnen. (natürlich kann ich immer noch eine veraltete Funktion verwenden, aber ich möchte, dass mein Skript einige Versionen von Django überlebt)Alternative zum veralteten setup_environ() für einmalige Django-Skripte?
Antwort
Dies hat in Django 1.7
geändertimport os
import django
from myapp import models
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()
print models.MyModel.objects.get(pk=1)
Django 1.4 Release Notes empfehlen offiziell, django.conf.settings.configure()
zu verwenden, um die Einstellungen festzulegen. Das ist gut für kleine Skripte, für die man alles "pythonisch" machen muss. Wenn Sie jedoch ein größeres Projekt haben, verwende ich gerne den Django-Ansatz, der ein separates Einstellungsmodul/Paket und dann seinen Pfad in der Umgebungsvariablen DJANGO_SETTINGS_MODULE
haben soll. Dies ist der Ansatz, der in manage.py
verwendet wird:
# manage.py
# ...
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings")
# ...
Veröffentlichung docs here gefunden werden kann.
Mit Django 1.6 hat 'manage.py' jetzt die Zeile wie vorgeschlagen:' os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "myproject.settings") 'und trotzdem, wenn ich versuche eine Shell zu starten, wirft es immer noch die gleicher Fehler wie in der ursprünglichen Frage. –
Um auf miki725 Antwort zu erweitern, wenn vor Ihnen
hattefrom django.core.management import setup_environ
import fooproject.settings as settings
setup_environ(settings)
nur mit
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings")
from django.conf import settings
und Ihre Einstellungen als Einstellungen ersetzt geladen.
Für Django 1.7+, siehe die Lösung von Ben Davis.
Dies funktioniert bei mir nicht mit django 1.6 - Ich habe den Projektpfad (nicht die App) zu sys.path hinzugefügt, ich habe das Einstellungsmodell zu DJANGO_SETTINGS_MODULE hinzugefügt und dann Einstellungen aus django.conf importiert, aber wenn ich es dann versuche und Importieren Sie eines meiner Datenbankmodelle (aus shoppinglist.models Import ShoppingList) es gibt einen Fehler "Kein Modul namens Modelle". Die gleiche Import-Zeile funktioniert innerhalb der Shell, die über manage.py gestartet wird. Irgendwelche Ideen? – frankster
Wenn Sie keine Modelle importieren können, klingt es so, als wären Ihre Pfadwerte nicht korrekt eingestellt, was außerhalb der Einstellungsfrage liegt. Sie sollten versuchen, in einer regulären Python-Shell zu testen, die mit "python" anstelle der django-Shell gestartet wurde, die mit "manage.py shell" gestartet wurde, um Ihre Pfade zu debuggen. –
Disclaimer: I'm using Django 1.8
gerade hinzufügen, meine 2 Cent: Ich habe einige der Lösungen auf dieser Seite vorgestellt versucht, aber sie did't überhaupt gearbeitet. Ich habe gerade eine Lösung gefunden, die ich unten teile.
Stellen Sie sicher, dass Sie sich im Stammordner Ihres Projekts befinden. Das gleiche, wo manage.py
befindet.
#make sure basic imports are in place
>>> import os,django
#set the specific django settings file
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings.base")
# import your modules and use them just like you do in your
# web apps
>>> from apps.customers import models as c
# normal usage... for instance:
>>> dir(c)
['You', 'Will', 'See', 'Your', 'Models', ... ]
was soll ich tun, wenn ich nicht in der Wurzel bin? – Alexis
Hinzufügen zu, was Leandro N sagte (danke, Leandro!), Man muss hinzufügen django.setup().
Zum Beispiel mein Code:
import os, django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
from app.models import ModelA, ModelB
FYI, ich bin auf Django 1.10.
- 1. Android: Alternative zum veralteten Context.MODE_WORLD_READABLE?
- 2. Alternative für veralteten -XDatatypeContext?
- 3. Alternative zur veralteten Methode ObjectMapper.reader (Klasse)
- 4. Einmalige Initialisierung für Nunit
- 5. Tipps zum Refactoring eines veralteten Datenbankschemas
- 6. Einmalige Bindung für eckige translate
- 7. Winkel einmalige Bindungen für Objekteigenschaften
- 8. Optionen zum Ersetzen der veralteten Galerie
- 9. Alternative zum Dozer für Bean Mapping?
- 10. Alternative zum Wörterbuch für schnelle Schlüsselsuchen?
- 11. Alternative Entwurfsmuster zum Beobachter für .Net
- 12. Ansible-Inventardatei für einmalige Ansible-Wiedergabe schreiben
- 13. Ersatz für veralteten Facebook-Code für Android
- 14. Ersetzen von veralteten Gradle LoggingManager.setLevel() für Checkstyle
- 15. Interaktive Alternative zum Punkt?
- 16. Alternative zum verschachtelten Satz?
- 17. Zerstörungsfreie Alternative zum Spleißen?
- 18. Wie einmalige Authentifizierung für zwei verschiedene Server?
- 19. Alternative zum Vollkalender?
- 20. Alternative zum globalisieren Edelstein
- 21. iPhone Einmalige Ereignisse Programmierung
- 22. Freeradius: Session Timeout Attribut für einmalige Anmeldung
- 23. Streifen für einmalige Zahlung. - Ruby on Rails
- 24. Logbücher für eine Heroku einmalige dyno, die
- 25. Alternative zum Batch-Importer für neo4j für große Datensätze
- 26. Apache Commons CLI: Ersatz für veralteten OptionBuilder?
- 27. Alternative zu PhantomJS zum Testen
- 28. .htaccess Verwendung veralteten Browser
- 29. SimpleCursorAdapter Alternative
- 30. Python schneller Alternative zum Wörterbuch?
dies funktioniert nicht für mich auf 1.7.3 django.setup() AttributeError: 'Modul' Objekt hat kein Attribut 'Setup' – Harry
Überprüfen Sie, um sicherzustellen, dass Sie die Dinge richtig importieren (und stellen Sie sicher, dass Ihr Pfad korrekt ist) . Die Setup-Funktion sollte in 1.7.3 da sein: https://github.com/django/django/blob/1.7.3/django/__init__.py –
django.setup() wurde in 1,8 django Version hinzugefügt. es wird nicht in 1.7 funktionieren. https://docs.djangoproject.com/en/1.8/topics/settings/ – javed