Ich baue eine App mit Django als Arbeitspferd. Bisher war alles in Ordnung - spezifizierte Datenbankeinstellungen, konfigurierte statische Verzeichnisse, URLs, Ansichten usw. Aber in dem Moment, in dem ich meine eigenen schönen und benutzerdefinierten 404.html- und 500.html-Seiten rendern wollte, begannen sich Probleme zu schleichen.
Ich habe die Dokumente zur benutzerdefinierten Fehlerbehandlung gelesen und die erforderlichen Konfigurationen in UrlsConf festgelegt, entsprechende Ansichten erstellt und die 404.html und die 500.html zum Vorlagenverzeichnis meiner App hinzugefügt (auch in der settings.py angegeben).
Aber die Dokumente sagen you can actually view custom error views until Debug is Off
, also habe ich es ausgeschaltet, um meine Sachen zu testen, und dann wird es wahnsinnig!
Ich kann nicht nur die benutzerdefinierte 404.html nicht anzeigen (tatsächlich wird sie geladen, sondern weil meine Fehlerseiten jeweils eine grafische Fehlermeldung enthalten - wie ein schönes Bild), wird die Quelle der Fehlerseite geladen, aber nichts anderes wird geladen! Nicht einmal verknüpftes CSS oder Javascript!
Im Allgemeinen werden nach dem Festlegen DEBUG = False
alle Ansichten geladen, aber alle verknüpften Inhalte (CSS, Javascript, Bilder usw.) werden nicht geladen! Was ist los? Fehlt etwas an statischen Dateien und der DEBUG
Einstellung?
quelle
Antworten:
Wenn das Debug deaktiviert ist, verarbeitet Django keine statischen Dateien mehr für Sie - Ihr Produktionswebserver (Apache oder so) sollte sich darum kümmern.
quelle
Wenn Sie den statischen Server weiterhin lokal bedienen müssen (z. B. zum Testen ohne Debug), können Sie devserver im unsicheren Modus ausführen:
quelle
Mit WhiteNoise können Sie statische Dateien in der Produktion bereitstellen .
Installieren:
Und ändern Sie Ihre wsgi.py- Datei in folgende Datei:
Und du kannst loslegen!
Gutschrift zum kreativen Blog des Lenkers .
ABER es wird wirklich nicht empfohlen, statische Dateien auf diese Weise in der Produktion bereitzustellen. Ihr Produktionswebserver (wie Nginx) sollte sich darum kümmern.
quelle
wgsi.py
Datei hinzugefügt habe . Die von Ihnen verlinkte Dokumentation enthält anscheinend weitere Anweisungen zur Verwendung von WhiteNoise. Ich werde andere Möglichkeiten ausprobieren und dich hier aktualisieren.manage.py runserver --insecure
hat bei mir nicht funktioniert. Dieser tut es jedoch.'whitenoise.middleware.WhiteNoiseMiddleware'
Middleware hinzu. Siehe Versionshinweise aus dem ChangelogIn urls.py habe ich diese Zeile hinzugefügt:
Fügen Sie diese beiden URLs in URL-Mustern hinzu:
und sowohl statische als auch Mediendateien waren zugänglich, wenn DEBUG = FALSE.
Ich hoffe es hilft :)
quelle
url(
durchre_path(
Wenn Sie in der Entwicklung die statische Serve-Ansicht verwenden, muss DEBUG = True sein:
Docs: Bereitstellen statischer Dateien in Developent
BEARBEITEN: Sie können einige URLs hinzufügen, um Ihre 404- und 500-Vorlagen zu testen. Verwenden Sie einfach die generische Ansicht direct_to_template in Ihren URLs.
quelle
Johnnys Antwort ist großartig, hat aber für mich immer noch nicht funktioniert, indem ich nur die dort beschriebenen Zeilen hinzugefügt habe. Basierend auf dieser Antwort waren die Schritte, die tatsächlich für mich funktionierten, wo:
Installieren Sie WhiteNoise wie beschrieben:
Erstellen Sie die
STATIC_ROOT
Variable und fügen Sie WhiteNoise zu IhrerMIDDLEWARE
Variablen hinzu insettings.py
:Ändern Sie dann Ihre
wsgi.py
Datei wie in Johnnys Antwort erläutert:Stellen Sie danach Ihre Änderungen auf Ihrem Server bereit (mit git oder was auch immer Sie verwenden).
Führen Sie
collectstatic
abschließend die Optionmanage.py
auf Ihrem Server aus. Dadurch werden alle Dateien aus Ihren statischen Ordnern in dasSTATIC_ROOT
zuvor angegebene Verzeichnis kopiert :Sie sehen nun einen neuen Ordner mit dem Namen
staticfiles
, der solche Elemente enthält.Nachdem Sie diese Schritte ausgeführt haben, können Sie jetzt Ihren Server ausführen und Ihre statischen Dateien im Produktionsmodus anzeigen.
Update: Falls Sie Version <4 hatten, zeigt das Änderungsprotokoll an, dass es nicht mehr erforderlich ist, das
WSGI_APPLICATION = 'projectName.wsgi.application'
in Ihrersettings.py
Datei zu deklarieren .quelle
Sie können statische Dateien in einer Produktions-Django-App sicher und ohne Daten bereitstellen
DEBUG=True
.Verwenden Sie dj_static in Ihrer WSGI-Datei ( github ) , anstatt Django selbst zu verwenden :
quelle
Öffnen Sie einfach Ihre Projekt-URLs.py und suchen Sie diese if-Anweisung.
Sie können settings.DEBUG auf True ändern und es wird immer funktionieren. Wenn Ihr Projekt jedoch etwas Ernstes ist, sollten Sie über andere oben erwähnte Lösungen nachdenken.
In Django 1.10 können Sie so schreiben:
quelle
Sie können dies auf viele verschiedene Arten debuggen. Hier ist mein Ansatz.
localettings.py:
urls.py:
Lesen Sie unbedingt die Dokumente;)
https://docs.djangoproject.com/de/2.0/howto/static-files/#limiting-use-to-debug-true
quelle
Die Unterstützung für Argumente der Zeichenfolgenansicht für url () ist veraltet und wird in Django 1.10 entfernt
Meine Lösung ist nur eine kleine Korrektur der obigen Conrado-Lösung.
quelle
Es ist zwar nicht am sichersten, aber Sie können den Quellcode ändern. Navigieren Sie zu
Python/2.7/site-packages/django/conf/urls/static.py
Dann bearbeiten Sie wie folgt:
Wenn sich
settings.debug==False
dies nicht auf den Code auswirkt, versuchen Sie auch nach dem Ausführenpython manage.py runserver --runserver
, statische Dateien auszuführen.HINWEIS : Informationen sollten nur zum Testen verwendet werden
quelle
Ich habe die folgenden Änderungen an meinem Projekt / urls.py vorgenommen und es hat bei mir funktioniert
Fügen Sie diese Zeile hinzu: aus django.conf.urls Import-URL
und füge hinzu: url (r '^ media / (? P. *) $', serve, {'document_root': settings.MEDIA_ROOT,}) in urlpatterns.
quelle