Ein einfaches Beispiel für Django und CSS
Ich bin neu in Django und die versuche zum einrichten einer wirklich einfachen Django-app.
Nun, ich bin bis zu Kapitel 5 in die Django-online buchen : http://www.djangobook.com/en/2.0/chapter05/
Alle, die ich jetzt machen möchte, bevor ich starten versucht-Datenbanken, ist ein einfacher CS und J, um die app so wie Sie ist.
Also die Frage ist, wie mache ich das? Ich habe nur eine app, und ich will nur eine main.css im css-Ordner, und eine main.js in einem js-Ordner.
Ich überprüfte die https://docs.djangoproject.com/en/1.3/howto/static-files/#staticfiles-in-templates Seite, aber nach dem Lesen und Lesen, es nicht zu sein scheinen eine ganze Menge, mit zu arbeiten in Form von Beispielen.
Wie Importiere ich die stylesheets/css (da ist ein Helfer wie CakePHP?), wo lege ich die CSS-und JS-Dateien, und brauche ich Sie zum konfigurieren der statischen Dingens?
UPDATE: der link : CSS Rendern in Django nicht viel helfen. Vor allem, dass es nicht Arbeit für mich, sondern auch ich, vor allem nicht, wie die "if debug" Teil. Was passiert, wenn ich mich bewege, prod? Warum hätte ich dann mein media-Ordner anders definiert wird, für prod und lokalen dev überhaupt? Sollte es nicht relativ sein, oder sogar an der gleichen Stelle?
InformationsquelleAutor der Frage bharal | 2012-02-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Folgen Sie django-Richtlinien, können Sie vereinfachen das Leben ungemein.
In deinem Beispiel-code in Ihrem Anwendung Verzeichnis, erstellen Sie einen Ordner namens statische. In diesem Ordner legen Sie Ihre css-Dateien.
Beispiel:
In Ihre Vorlagen:
<link href="{{ STATIC_URL }}style.css" />
Stellen Sie sicher, fügen
myapp
zu denINSTALLED_APPS
Liste insettings.py
. Nun, wenn Sie verwenden die integrierte Entwicklungs-server, das Stylesheet korrekt dargestellt werden.Django sucht ein
static
Verzeichnis im installierten Anwendungen standardmäßig und mit aktuellen Versionen von django, statische Dateien sind standardmäßig aktiviert.Dies wird empfohlen, da beim ausführen
collectstatic
zu sammeln, alle statischen Dateien, Dateien mit dem gleichen Namen werden überschrieben. Wenn Sie eine Datei namensmyimage.jpg
in einer anderen Anwendung überschrieben werden. Geben Sie den Namen der Anwendung im inneren der statischen Verzeichnis werden dies verhindern, weil die exakte Verzeichnis-Struktur repliziert werden innerhalb IhrerSTATIC_ROOT
Verzeichnis.Ein einfaches Beispiel, um den Punkt zu illustrieren. Wenn Sie eine django-Projekt mit zwei apps, wie diese:
assets
ist IhreSTATIC_ROOT
. Nun, wenn Sie Sie ausführencollectstatic
:Sie sehen, es ist die Erstellung der Verzeichnisse. In Ihren Vorlagen, die Sie würde, nun finden Sie jede Datei mit "namespace" der app:
{{ STATIC_URL }}/myapp/test.txt
InformationsquelleAutor der Antwort Burhan Khalid
Für die Beispiele Sie zeigte auf zu arbeiten, Ihre statische Dateien müssen in einem Ort zugänglich zu Django built-in
staticfiles
app.Gibt es ein paar Schritte, damit dies geschieht:
Erste, in Ihrem Projekt-Verzeichnis (z.B. neben Ihrem
manage.py
- Datei), müssen Sie ein Verzeichnis erstellen, halten Sie Ihre statische Dateien. Nennen Sie es "static_files".Als Nächstes müssen Sie Django kennen, schauen Sie in das Verzeichnis, indem Sie es in der Liste der
STATICFILES_DIRS
innerhalb Ihrersettings.py
Datei.Etwas wie dieses:
Innerhalb
static_files
Verzeichnis, Sie können erstellen, was auch immer die Struktur, die Sie wollen, so dass ist, wo Sie Ihrecss
undjs
Verzeichnisse gehen könnte.Danach sollten Sie in der Lage sein zu verwenden, die
{{ STATIC_URL }}
- tag in Ihren templates erhalten Sie Zugriff auf die Basis-URL Ihrer statischen Dateien.So, sagen wir, zum Beispiel, erstellen Sie
project/static_files/css/base.css
verwenden, würden Sie es in Ihrer Vorlage wie folgt:Hoffe, das hilft!
Bearbeiten
Mit den Standardeinstellungen für
STATICFILES_FINDERS
Django sollte automatisch dazu dienen, bis alle Dateien aus den Verzeichnissen in Ihrem STATICFILES_DIRS -- siehe die docs für details.Wenn dies nicht funktioniert, einige Dinge zu überprüfen:
STATICFILES_FINDERS
Einstellung auf etwas anderes als den Standard?django.contrib.staticfiles
in Ihre Liste derINSTALLED_APPS
imsettings.py
?python manage.py runserver
)?DEBUG = True
in Ihremsettings.py
? Wenn nicht, müssen Sie entwederTrue
oder verwenden Sie dieunsicher
- option (python manage.py runserver-unsichere
). Wenn Sie gehen, um Produktion, schauen Sie sich diecollectstatic
- Befehl.InformationsquelleAutor der Antwort Gabriel Grant
Die empfohlene Vorgehensweise hat sich wieder verändert (von mindestens Django 1.5 glaube ich).
Oben in deinem template setzen:
Dann, mit der gleichen Verzeichnisstruktur (
myapp/static/myapp/style.css
):Quelle
InformationsquelleAutor der Antwort Chris
Das handling von statischen Dateien hat sich stark verändert (zum besseren) in Django 1.3. Insbesondere ist der flexible Unterschied zwischen statischen Dateien (denken Sie an code benötigt, CSS/JS/Bilder) und media-Dateien (denken Sie an Bildern hochgeladen von Benutzer in der Verwendung von du-Anwendung). Die
staticfiles
app verarbeitet, was Ihr bittet.Setzen
django.contrib.staticfiles
in Ihrem settings.py INSTALLED_APPS. Dann erstellen Sie einestatic
Verzeichnis in Ihrem app Verzeichnis - soproject/app/static/
. Innerhalb dieser statisch-Verzeichnis organisieren Sie Ihre support-Dateien, wie Sie möchten (css/js/, images/icons/usw).staticfiles
standardmäßig sieht das static/Verzeichnis für jede Anwendung aufgeführt, die in INSTALLED_APPS. Nicht nur Ihre eigenen, sondern alle, die Django-apps und apps von Drittanbietern. (nebenbei bemerkt: der Admin in Django 1.4 bewegt sich auf dieses Paradigma, während in der 1.3 er verwendet immer noch die ADMIN_MEDIA_PREFIX).Den
staticfiles
app kennt alle diese statischen/Verzeichnisse in allen apps, aber es braucht, um alle zu sammeln, die Inhalte, um die es dienen. In der Entwicklung, bei der Verwendung vonmanage.py runserver
es ist für Sie verarbeitet. Django wird Ihre Website laufen und automatisch liefern alle statischen Inhalte von allen statischen Quellen. (Quellen, wie bereits erwähnt in einer anderen Antwort, in der STATICFILES_FINDERS Einstellung.) Wenn nicht mit der runserver, verwenden Siemanage.py collectstatic
zu sammeln, alle statischen Dateien in die Ordner definiert, inSTATIC_ROOT
. Bewahren Sie dieses Verzeichnis leer. Es ist eine Sammlung Ziel. Natürlich Ihr web-server muss so konfiguriert werden, dienen diesem Verzeichnis.Gibt es jetzt ein Stück mehr - die Ansicht. Dies ist, wo die
STATIC_URL
ins Spiel kommt. Bei verweisen auf statische Dateien in Ihre Vorlagen, die einfachste Möglichkeit ist die Verwendung{{ STATIC_URL }}
. Django standardmäßig macht, dass die variable für jede Ansicht mit dem RequestContext. So etwas tun -<link href="{{ STATIC_URL }}/css/main.css" />
.Für mehr Informationen und mehr Möglichkeiten zu finden, um STATIC_URL in Ihren Vorlagen, check-out diese Antwort zu einer ähnlichen Frage.
InformationsquelleAutor der Antwort JCotton
endlich habe ich nach vielen Tagen hier ist, wie Sie getan werden sollte
1> benötigen Sie Ihre statische Datei in Ihrem app zusammen mit in Ihr Projekt
2> hier ist setting.py
3>views.py
4> template-Datei
5> urls.py
InformationsquelleAutor der Antwort Roshik Dahal