it-swarm.com.de

Django - Statische Datei nicht gefunden

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 individuell festlegen?

58

Ich habe STATIC_ROOT und STATICFILES_DIRS verwechselt

Eigentlich habe ich den Nutzen von STATIC_ROOT nicht wirklich verstanden. Ich dachte, dass es das Verzeichnis ist, in das ich meine gemeinsamen Dateien ablegen muss. Dieses Verzeichnis wird für die Produktion verwendet. Dies ist das Verzeichnis, in das statische Dateien von collectstatic abgelegt (gesammelt) werden.

STATICFILES_DIRS ist das, was ich brauche.

Da ich in einer Entwicklungsumgebung bin, besteht die Lösung für mich darin, nicht STATIC_ROOT zu verwenden (oder einen anderen Pfad anzugeben) und mein gemeinsames Dateiverzeichnis in festzulegen STATICFILES_DIRS :

#STATIC_ROOT = (os.path.join(SITE_ROOT, 'static_files/'))
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
STATICFILES_DIRS = (
  os.path.join(SITE_ROOT, 'static/'),
)

Vergiss auch nicht from Django.conf import settings

84

Das Bereitstellen statischer Dateien kann auf verschiedene Arten erfolgen. Hier sind meine Notizen zu sich selbst:

  • fügen Sie ein static/my_app/ -Verzeichnis zu my_app hinzu (siehe Hinweis zum Namensraum weiter unten).
  • definieren Sie ein neues Verzeichnis der obersten Ebene und fügen Sie dieses zu STATICFILES_DIRS in settings.py hinzu (beachten Sie, dass The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting)

Ich bevorzuge den ersten Weg und ein Setup, das dem nahe kommt in der Dokumentation definiert , damit die Datei admin-custom.css ein paar Admin-Stile überschreibt, habe ich ein Setup wie folgt:

.
├── my_app/
│   ├── static/
│   │   └── my_app/
│   │       └── admin-custom.css
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── static/
├── templates/
│   └── admin/
│       └── base.html
└── manage.py
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

Dies wird dann in der Vorlage folgendermaßen verwendet:

# /templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}

{% block extrahead %}
    <link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}

Wenn Sie während der Entwicklung Django.contrib.staticfiles [ed: standardmäßig installiert] verwenden, wird dies automatisch von runserver ausgeführt, wenn DEBUG auf True [...] gesetzt ist.

https://docs.djangoproject.com/de/1.10/howto/static-files/

Bei der Bereitstellung führe ich collectstatic aus und versorge statische Dateien mit nginx.


Die Dokumente, die alle Verwirrung für mich beseitigt haben:

STATIC_ROOT

Der absolute Pfad zu dem Verzeichnis, in dem collectstatic statische Dateien für die Bereitstellung sammelt.

... es ist nicht ein Ort, um Ihre statischen Dateien dauerhaft zu speichern. Sie sollten dies in Verzeichnissen tun, die von den Suchern von staticfiles gefunden werden. Standardmäßig handelt es sich dabei um Unterverzeichnisse "static /" und alle Verzeichnisse, die Sie in STATICFILES_DIRS angeben.

https://docs.djangoproject.com/de/1.10/ref/settings/#static-root


Statischer Dateinamensraum

Jetzt könnten wir in der Lage sein, unsere statischen Dateien direkt in my_app/static/abzulegen (anstatt ein anderes my_app-Unterverzeichnis zu erstellen), aber es wäre tatsächlich eine schlechte Idee. Django verwendet die erste statische Datei, deren Name übereinstimmt, und wenn Sie eine statische Datei mit demselben Namen in einer anderen Anwendung hätten, wäre Django Wir müssen in der Lage sein, Django) auf die richtige zu verweisen, und der einfachste Weg, dies sicherzustellen, besteht darin, sie mit einem Namensraum zu versehen, dh diese statischen Dateien in eine andere zu legen Verzeichnis, das für die Anwendung selbst benannt ist.

https://docs.djangoproject.com/de/1.10/howto/static-files/


STATICFILES_DIRS

Ihr Projekt verfügt wahrscheinlich auch über statische Elemente, die nicht an eine bestimmte App gebunden sind. Zusätzlich zur Verwendung eines statischen Verzeichnisses in Ihren Apps können Sie eine Liste von Verzeichnissen (STATICFILES_DIRS) in Ihrer Einstellungsdatei definieren, in der Django sucht auch nach statischen Dateien.

https://docs.djangoproject.com/de/1.10/howto/static-files/

25
ptim

In der Datei settings.py Können sich nur zwei Dinge befinden, die Ihre statischen Dateien bedienen.

1) STATIC_URL = '/static/'

2)

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

und Ihre statischen Dateien sollten sich unter dem statischen Verzeichnis befinden, das sich im selben Verzeichnis befindet wie die Einstellungsdatei des Projekts.

Selbst dann, wenn Ihre statischen Dateien nicht geladen werden, haben Sie möglicherweise den Grund dafür beibehalten

DEBUG = False

ändern Sie es in True (nur für Entwicklungszwecke). Ändern Sie in der Produktion einfach STATICFILES_DIRS In den Pfad, in dem sich die statischen Dateien befinden.

14
Naren Yellavula

Ein weiterer Fehler kann sein, dass Ihre App nicht in der Liste INSTALLED_APPS Aufgeführt ist.

INSTALLED_APPS = [
    # ...
    'your_app',
]

Ohne es zu haben, können Sie auf Probleme stoßen, wie das Nicht-Erkennen Ihrer statischen Dateien, im Grunde alle Dateien, die Ihre App betreffen. Auch wenn es richtig sein kann, wie in der richtigen Antwort vorgeschlagen, mit:

STATICFILES_DIRS = (adding/path/of/your/app)

Kann einer der Fehler sein und sollte überprüft werden, wenn dieser Fehler auftritt.

2
Aklank Jain

Wenn Ihre statische URL korrekt ist, aber immer noch:

Nicht gefunden: /static/css/main.css

Vielleicht dein 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()
1
HoangYell

Ich habe festgestellt, dass ich meine DEBUG -Einstellung in meinen lokalen Einstellungen verschoben habe, um sie durch einen Standardwert False zu überschreiben. Überprüfen Sie im Wesentlichen, ob die Einstellung DEBUG tatsächlich falsch ist, wenn Sie mit DEBUG und runserver entwickeln.

0
Daniel Butler

{'document_root', settings.STATIC_ROOT} muss sein {'document_root': settings.STATIC_ROOT}

oder du bekommst eine Fehlermeldung wie dictionary update sequence element #0 has length 6; 2 is required

0
Jens Timmerman