45 Stimmen

Django: Wie servieren Sie Medien / Stylesheets und verlinken sie innerhalb von Vorlagen?

Versionen dieser Frage wurden bereits gestellt, aber ich kann meine Stylesheets immer noch nicht richtig laden, wenn meine Vorlagen gerendert werden.

Ich versuche, statische Medien aus dem Django-Prozess während der Entwicklung zu servieren - was in der Produktion dringend abgeraten wird, ich bin mir dessen bewusst. Ich werde meine Konfiguration und meine Vorlage posten, und hoffentlich kann mir jemand helfen zu verstehen, wo ich mich vertue.

Beachten Sie, dass ich versucht habe, dem Beispiel auf der Django-Projektwebsite zu folgen, jedoch nicht erwähnt wird, wie man in einer Vorlage auf seine Stylesheets verweist. Ich habe auch viele verschiedene Variationen desselben Dinges ausprobiert, daher kann mein Code/Einstellungen ein wenig anders sein als das Beschriebene.

settings.py

MEDIA_ROOT = 'D:/Dev Tools/django_projects/dso/media'
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/media/'

urls.py

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/(.*)', admin.site.root),
    (r'^ovramt/$', 'dso.ovramt.views.index'),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^media/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )

Innerhalb meiner Vorlage:

 {% block title %} DSO Vorlage {% endblock %}  

Ich versichere Ihnen, die Dateien (Vorlagen/Medien) befinden sich im richtigen Verzeichnis auf meinem Dateisystem. Wenn ich weitere Informationen bereitstellen muss, bitte posten Sie einen Kommentar.


Bearbeiten:

Eins der Probleme, die ich hatte, war die Verwendung eines '/' vor meinen Links. Wenn der Schrägstrich vorangestellt ist, wird der Link von der Wurzel der Website geöffnet. Wenn kein Schrägstrich vorhanden ist, wird der Link auf aktueller Ebene geöffnet. Ein Beispiel:

www.beispiel.com/anwendung/ hat einen Link "/app2/ und einen Link "app3/".
app2 wird unter www.beispiel.com/app2/ geöffnet und app3 wird unter www.beispiel.com/anwendung/app3/ geöffnet. Das hat mich glaube ich verwirrt.

1 Stimmen

Eine Frage; haben Sie versucht, "http:///media/styles.css" direkt aus Ihrem Browser zu laden?

3 Stimmen

Ich bin der einzige, der es albern findet, dass man bei der Entwicklung mit Django all diese Hürden überwinden muss, um CSS und Bilder zu testen/vorschauen? Klar, man will das nicht in der Produktion machen und einen echten Webserver verwenden, aber für die Entwicklung muss man Styles/Bilder sehen, um eine gute Vorschau zu erhalten.

2 Stimmen

Es gab wirklich nicht viele Hürden zu überwinden. Ich bin einfach dort gestolpert, wo ich wahrscheinlich nicht hätte sein sollen.

1voto

David Punkte 3206

Nur schnell meine Gedanken dazu. Während alle Vorschläge hier gut funktionieren und ich Tys Beispiel beim Entwickeln verwende, möchten Sie möglicherweise in die Produktion wechseln und sich dafür entscheiden, Dateien über einen normalen Apache-Server oder jeden anderen Server, den Sie verwenden, bereitzustellen.

Was ich mache, ist, dass ich, sobald ich mit der Entwicklung fertig bin, eine Subdomain einrichte und alle Links zu statischen Medien ersetze. Zum Beispiel:

Die Gründe dafür sind zweifach. Erstens scheint es einfach langsamer zu sein, wenn Django diese Anfragen bearbeitet, wenn es nicht erforderlich ist. Zweitens können die meisten Browser tatsächlich Dateien gleichzeitig von 3 verschiedenen Domains herunterladen. Durch die Verwendung einer zweiten Subdomain für Ihre statischen Dateien wird tatsächlich die Download-Geschwindigkeit Ihrer Benutzer beschleunigt.

0voto

datashaman Punkte 6641

Eine weitere Sache, die hinzugefügt werden muss, ist, dass Sie, wenn Sie einen separaten Medienserver auf einer Subdomain/einem anderen Domain haben, die Cookies für Ihre statischen Medien deaktivieren können. Spart etwas Verarbeitung und Bandbreite.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X