Ich habe mehrere Beiträge zu diesem Problem gesehen, aber meine Lösung nicht gefunden.
Ich versuche, statische Dateien in meiner Django 1.3-Entwicklungsumgebung bereitzustellen.
Hier sind meine Einstellungen
...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'/static/',
)
...
Meine urls.py
urlpatterns = patterns('',
...
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root', settings.STATIC_ROOT}
),
...
);
Mein / home / glide / Documents / django / cbox / static / Verzeichnis ist wie
css
main.css
javascript
image
Beim Versuch, auf http://127.0.0.1:8000/static/css/main.css zuzugreifen, wird eine 404-Fehlermeldung angezeigt .
Muss ich Muster für CSS, Javascript und Bilder einzeln angeben?
quelle
from django.conf import settings
natürlich nicht vergessenBASE_DIR
stattdessen eingebaute constSITE_ROOT
und es funktioniert.Das Bereitstellen statischer Dateien kann auf verschiedene Arten erfolgen. Hier sind meine Notizen zu mir selbst:
static/my_app/
Verzeichnis hinzumy_app
(siehe Hinweis zum Namespace unten).The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)Ich bevorzuge den ersten Weg und ein Setup, das dem in der Dokumentation definierten Weg nahe kommt. Um die Datei
admin-custom.css
zum Überschreiben einiger Admin-Stile bereitzustellen, habe ich ein Setup wie das folgende:# settings.py STATIC_ROOT = os.path.join(BASE_DIR, 'static') STATIC_URL = '/static/'
Dies wird dann in der Vorlage wie folgt verwendet:
# /templates/admin/base.html {% extends "admin/base.html" %} {% load static %} {% block extrahead %} <link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}"> {% endblock %}
Bei der Bereitstellung führe ich
collectstatic
statische Dateien mit nginx aus und stelle sie bereit.Die Dokumente, die die Verwirrung für mich beseitigt haben:
quelle
Es konnte nur zwei Dinge geben
settings.py
die Ihnen Probleme bereiten.1)
STATIC_URL = '/static/'
2)
STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), )
und Ihre statischen Dateien sollten sich im statischen Verzeichnis befinden, das sich im selben Verzeichnis wie die Projekteinstellungsdatei befindet.
Selbst wenn Ihre statischen Dateien nicht geladen werden, haben Sie dies möglicherweise beibehalten
DEBUG = False
Ändern Sie es in True (nur für Entwicklungszwecke). Wechseln Sie
STATICFILES_DIRS
in der Produktion einfach in den Pfad, in dem sich statische Dateien befinden.quelle
Wenn Ihre statische URL korrekt ist, aber dennoch:
Vielleicht Ihr WSGI-Problem.
➡ Config WSGI dient sowohl der Entwicklungsumgebung als auch der Produktionsumgebung
==========================project/project/wsgi.py========================== import os from django.conf import settings from django.contrib.staticfiles.handlers import StaticFilesHandler from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') if settings.DEBUG: application = StaticFilesHandler(get_wsgi_application()) else: application = get_wsgi_application()
quelle
STATIC_ROOT
Zeilestatic
Ordner in einem anderen Verzeichnis erstellen . Angenommen, das Verzeichnis lautet:project\static
Jetzt aktualisieren:STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'project/static/') ] STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Was auch immer Sie tun, der Hauptpunkt ist
STATICFILES_DIRS
undSTATIC_ROOT
sollte nicht dasselbe Verzeichnis enthalten.Ich weiß, es ist lange her, aber ich hoffe, die neuen Freunde können Hilfe bekommen
quelle
Ein weiterer Fehler kann darin bestehen, dass Ihre App nicht in der
INSTALLED_APPS
Liste aufgeführt ist:INSTALLED_APPS = [ # ... 'your_app', ]
Ohne es zu haben, können Probleme auftreten, wie das Nichterkennen Ihrer statischen Dateien, im Grunde aller Dateien, die Ihre App betreffen. Auch wenn es korrekt sein kann, wie in der richtigen Antwort vorgeschlagen, indem Sie Folgendes verwenden:
STATICFILES_DIRS = (adding/path/of/your/app)
Kann einer der Fehler sein und sollte überprüft werden, wenn dieser Fehler auftritt.
quelle
Ich habe festgestellt, dass ich meine
DEBUG
Einstellung in meinen lokalen Einstellungen verschoben habe , um sie durch einen Standardwert zu überschreibenFalse
. Stellen Sie im Wesentlichen sicher, dass die DEBUG-Einstellung tatsächlich falsch ist, wenn Sie mitDEBUG
und entwickelnrunserver
.quelle
Ich löse dieses Problem, indem ich meinen Projektnamen in INSTALLED_APPS hinzufüge.
quelle
TEMPLATE_DIR=os.path.join(BASE_DIR,'templates') STATIC_DIR=os.path.join(BASE_DIR,'static') STATICFILES_DIRS=[STATIC_DIR]
quelle
In Ihrem Befehl cmd type
python manage.py findstatic --verbosity 2 static
wird das Verzeichnis angegeben, in dem Django nach statischen Dateien sucht. Wenn Sie eine virtuelle Umgebung erstellt haben, befindet sich in diesem Ordner virtual_environment_name ein statischer Ordner.VIRTUAL_ENVIRONMENT_NAME\Lib\site-packages\django\contrib\admin\static
. Wenn Django beim Ausführen des obigen Befehls 'findstatic' diesen Pfad anzeigt, fügen Sie einfach alle Ihre statischen Dateien in dieses statische Verzeichnis ein. Verwenden Sie in Ihrer HTML-Datei die JINJA-Syntax für href und suchen Sie nach anderen Inline-CSS. Wenn nach der Angabe der JINJA-Syntax immer noch ein Bild src oder eine URL vorhanden ist, stellen Sie ihm '/ static' voran. Das hat bei mir funktioniert.quelle
Wenn Sie das
django-storages
Modul hinzugefügt haben (um beispielsweise das Hochladen von Dateien in S3 in Ihrer Django-App zu unterstützen) und wenn Sie wie ich die Dokumentation dieses Moduls nicht richtig gelesen haben , entfernen Sie einfach diese Zeile aus Ihremsettings.py
:STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Andernfalls werden Ihre statischen Assets NICHT auf Ihrem lokalen Computer, sondern remote im S3-Bucket, einschließlich Admin-Panel-CSS, angezeigt, wodurch das Admin-Panel-CSS effektiv beschädigt wird.
quelle
STATICFILES_DIRS
wird in der Entwicklung undSTATIC_ROOT
in der Produktion eingesetzt ,STATICFILES_DIRS
undSTATIC_ROOT
sollte nicht den gleichen Ordnernamen haben,Wenn Sie in Entwicklung und Produktion genau denselben statischen Ordner verwenden müssen, versuchen Sie diese Methode
schließen Sie dies in ein
settings.py
import socket HOSTNAME = socket.gethostname() # if hostname same as production url name use STATIC_ROOT if HOSTNAME == 'www.example.com': STATIC_ROOT = os.path.join(BASE_DIR, "static/") else: STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static/'), ]
quelle
{'document_root', settings.STATIC_ROOT}
muss sein{'document_root': settings.STATIC_ROOT}
oder Sie erhalten eine Fehlermeldung wie
dictionary update sequence element #0 has length 6; 2 is required
quelle