Frage

Variationen dieser Frage gestellt worden, aber ich bin immer noch nicht mein Stylesheets bekommen richtig zu laden, wenn meine Vorlagen gerendert werden.

Ich bin versucht, während der Entwicklung statische Medien aus dem Django Prozess zu dienen -, die stark in der Produktion wird abgeraten, ich bin mir dessen bewusst. Ich werde meine Konfiguration und meine Vorlage veröffentlichen, und hoffentlich kann mir jemand helfen, zu verstehen, wohin ich gehe falsch.

Beachten Sie, dass ich versuche, hätte das Beispiel auf der Django Projekt-Website zu folgen, es ist jedoch nicht erwähnt, wie Sie zu Ihrem Stylesheets aus einer Vorlage verweisen. Ich habe auch versucht, viele verschiedene Variationen der gleichen Sache, so dass mein Code / Einstellungen können ein wenig weg von dem, was ist beschrieben.

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<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )

Im Rahmen meiner Vorlage:

<head> 
<title> {% block title %} DSO Template {% endblock %} </title> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<link rel="stylesheet" type="text/css" href="../media/styles.css">
</head>

Ich versichere Ihnen, die Dateien (templates / Medien) im richtigen Verzeichnis auf meinem Dateisystem sind. Wenn es irgendeine zusätzliche Informationen, die ich brauche zu liefern, schreiben Sie bitte einen Kommentar.


Edit:

Eines der Probleme, die ich hatte war die Verwendung eines ‚/‘ meine Links vorangestellt wird. Wenn der Schrägstrich vorangestellt wird, wird die Verbindung von der Wurzel der Site geöffnet. Wenn es kein Schrägstrich ist, wird der Link in der aktuellen Ebene geöffnet. Ein Beispiel:

www.example.com/application/ hat einen Link „/ app2 / und einen Link "app3 /".
app2 wird bei www.example.com/app2/ öffnen und app3 bei www.example.com/application/app3/ geöffnet. Das verwirrte mich, denke ich.

War es hilfreich?

Lösung

Ich musste nur das selbst herausfinden.

settings.py:

MEDIA_ROOT = 'C:/Server/Projects/project_name/static/'
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'

urls.py:

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

Template-Datei:

<link rel="stylesheet" type="text/css" href="/static/css/style.css" />

Mit der Datei hier zu finden:

"C:/Server/Projects/project_name/static/css/style.css"

Andere Tipps

Django bereits einen Kontext Prozess für MEDIA_URL hat, finden Sie unter Djangos Dokumentation .

Es sollte standardmäßig availbale werden (es sei denn, Sie CONTEXT_PROCESSORS angepasst haben und vergessen, es zu addieren) in einem Request.

ich in der Regel meinen eigene Vorlage einfachen Tag machen, weil Django ist nicht CSS / JavaScript-Dateien geben. Apache tut es so meine Medien-URL ist in der Regel http://static.mysite.com .

yourApp / templatetags / media_url.py:

from django.template import Library
from yourapp.settings import MEDIA_URL
register = Library()

@register.simple_tag
def media_url():
    return MEDIA_URL

Und in meiner Template-Datei:

{% load media_url %}
<link href="{{ media_url }}css/main.css" rel="stylesheet" type="text/css">

Sie können auch Ihre eigener Kontext Präprozessor die MEDIA_URL Variable in jeder Vorlage hinzuzufügen.

Ich verwende nur absolute Namensgebung. Es sei denn, Sie die Website in einem tiefen Pfad laufen lassen (oder auch wenn Sie sind), würde ich die .. fallen und gehen für so etwas wie:

<link rel="stylesheet" type="text/css" href="/media/styles.css">

Ich habe ein paar Ideen habe, ich weiß nicht, wer von ihnen für mich funktioniert:)

  

Stellen Sie sicher, einen Schrägstrich zu verwenden, und habe dies von der MEDIA_URL Einstellung unterschiedlich sein (da die gleiche URL kann nicht auf zwei verschiedene Arten von Dateien abgebildet wird).

Das ist von http: //docs.djangoproject. com / de / dev / ref / Einstellungen / # admin-media-Präfix

Zum anderen kann es sein, dass Sie verwirrend Verzeichnisse im Dateisystem mit URL-Pfade sind. Versuchen Sie es mit absoluten URLs und dann verfeinern sie.

dachte, ich würde in schnell läuten. Während alle hier die Sätze gut funktionieren, und ich Tys Beispiel verwenden, während die Entwicklung, wenn Sie die Produktion treffen wollen Sie könnten entscheiden Dateien über eine gerade Apache zu dienen, oder was auch immer sonst Server Sie verwenden.

Was ich tue, ist ich ein Setup Sub-Domain, sobald ich die Entwicklung bin fertig, und ersetzen Sie alle Links zu statischen Medien. Zum Beispiel:

<link rel="stylesheet" type="text/css" href="http://static.mydomain.com/css/style.css" />

Die Gründe, dies zu tun sind zweifach. Erstens scheint es so, wie es langsamer sein würde, hat Django diese Anfragen behandeln, wenn es nicht gebraucht wird. Zweitens, da die meisten Browser können tatsächlich Dateien herunterladen gleichzeitig aus 3 verschiedenen Domänen, eine zweite Sub-Domain für Ihre statischen Dateien mit beschleunigt tatsächlich die Download-Geschwindigkeit Ihrer Benutzer.

Ein andere Sache hinzuzufügen ist, dass, wenn Sie einen separaten Media-Server auf einer Sub-Domain / andere Domain haben, können Sie Cookies für Ihre statischen Medien deaktivieren. Speichert eine wenig Verarbeitung und Bandbreite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top