Ich bin verwirrt von static root
und möchte Dinge klären.
Um statische Dateien in Django bereitzustellen, sollte Folgendes in settings.py
und enthalten sein urls.py
:
import os
PROJECT_DIR=os.path.dirname(__file__)
1. Absoluter Pfad zu dem Verzeichnis, in dem statische Dateien gesammelt werden sollen
STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')
2. URL-Präfix für statische Dateien
STATIC_URL = '/static/'
3. Zusätzliche Speicherorte für statische Dateien
STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)
... und in urls.py
folgenden Zeilen:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
r'^static/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.STATIC_ROOT}
))
4. Wir verwenden auch python manage.py collectstatic
Fragen:
Könnte mir bitte jemand den Workflow erklären: Wie sollte man idealerweise vorgehen? Ab sofort kopiere / füge ich die obigen Codefragmente an die angegebenen Speicherorte ein und erstelle weiterhin neue Dateien im statischen Verzeichnis, und es funktioniert. In meinem habe
settings.STATIC_ROOT
ich jedoch auf ein anderes Verzeichnis verwiesen.Es wäre großartig, wenn jemand den Workflow jeder Einstellung erklären könnte: wie Dateien gesammelt und verwaltet werden und was eine gute Vorgehensweise wäre.
Vielen Dank.
django
django-urls
django-staticfiles
user993563
quelle
quelle
if settings.DEBUG:
Django statische Medien nicht sehr gut bedient. Dies sollte einem echten Webserver überlassen bleiben.Antworten:
STATIC_ROOT
Jetzt
./manage.py collectstatic
kopiert der Befehl alle statischen Dateien (dh im statischen Ordner in Ihren Apps, statische Dateien in allen Pfaden) in das Verzeichnis/var/www/example.com/static/
. Jetzt müssen Sie dieses Verzeichnis nur noch auf Apache oder Nginx..etc bereitstellen.STATIC_URL
Wenn Sie festlegen
STATIC_URL = 'http://static.example.com/'
, müssen Sie denSTATIC_ROOT
Ordner (dh"/var/www/example.com/static/"
) per Apache oder Nginx unter URL bereitstellen'http://static.example.com/'
(damit Sie auf die statische Datei'/var/www/example.com/static/jquery.js'
mit verweisen können'http://static.example.com/jquery.js'
).Jetzt können Sie in Ihren Django-Vorlagen darauf verweisen, indem Sie:
was wird rendern:
quelle
{{ STATIC_URL }}jquery.js
und{% static "jquery.js" %}
sind gleich. dh beide werden zurückkehren/static/jquery.js
. Neuere Django- Versionen empfehlen die Verwendung{% static "jquery.js" %}
, aber Sie müssen das Templatetag laden, dh{% load staticfiles %}
. in älteren Django- Version empfiehlt{{STATIC_URL}}
static
Methode anstatt aufSTATIC_URL
Methode umgestellt , und der Fehler war verschwunden. Guter Aufruf zu den Vorschlägen basierend auf Versionen.STATICFILES_DIRS
: Hier können Sie die statischen Dateien für Ihr Projekt aufbewahren, z. B. die von Ihren Vorlagen verwendeten.STATIC_ROOT
: Lassen Sie dies leer. Wenn Sie dies tunmanage.py collectstatic
, werden alle statischen Dateien auf Ihrem System gesucht und hierher verschoben. Ihr statischer Dateiserver soll diesem Ordner überall dort zugeordnet werden, wo er sich befindet. Überprüfen Sie dies, nachdem Sie collectstatic ausgeführt haben, und Sie werden feststellen, dass die Verzeichnisstruktur von django erstellt wurde.--------Bearbeiten----------------
Wie von @DarkCygnus hervorgehoben, sollte STATIC_ROOT auf ein Verzeichnis in Ihrem Dateisystem verweisen. Der Ordner sollte leer sein, da er von Django gefüllt wird.
oder
-------- Edit beenden -----------------
STATIC_URL
: '/ static /' ist normalerweise in Ordnung, es ist nur ein Präfix für statische Dateien.quelle
STATICFILES_DIRS
sollte als zusätzliches Verzeichnis für statische Dateien dienen. Wenn Sie alle Ihre css / js / images in den Ordner APP_NAME / static / APP_NAME legen, müssen Sie keine Angaben machenSTATICFILES_DIRS
.settings.py
(indemSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
) , bevor der collectstatic Befehl ausgeführt wird .Alle obigen Antworten sind hilfreich, aber keine hat mein Problem gelöst. In meiner Produktionsdatei war meine STATIC_URL
https://<URL>/static
und ich habe dieselbe STATIC_URL in meiner Datei dev settings.py verwendet.Dies führt zu einem stillen Fehler in django / conf / urls / static.py.
Der Test
elif not settings.DEBUG or '://' in prefix:
nimmt das '//' in der URL auf und fügt das statische URL-Muster nicht hinzu, sodass keine statischen Dateien gefunden werden.Es wäre nachdenklich, wenn Django eine Fehlermeldung ausspucken würde, die besagt, dass Sie keine
http(s)://
mit verwenden könnenDEBUG = True
Ich musste STATIC_URL in '/ static /' ändern.
quelle