Ich verwende Django 1.3 mit eingebauter statischer App.
Meine statische Ordnerstruktur ist wie folgt:
%Vor% Also habe ich versucht, Bilder unter static/css/img/
Ordner von CSS wie folgt zu referenzieren:
Aber die Bilder zeigen sich nicht. Wenn ich Elemente in Chrome inspiziere, habe ich den Bildpfad als http://localhost/mysite/static/css/main.css/img/btn_white.gif/
Das ist sehr seltsam, da dieser relative Pfad auf static/css/
statt auf main.css
verweisen sollte. Also habe ich versucht, den Pfad zu url('../img/btn_white.gif')
zu ändern, und zwar in Chrome und Firefox, aber nicht in IE.
Ich bin mir ziemlich sicher, dass dieses Problem mit Django zusammenhängt, denn in meinem reinen HTML / CSS funktioniert dieser relative Pfad gut. Ich habe auch versucht, css in Medienordner und das Problem ist das gleiche.
Meine Einstellungen beziehen sich auf die statische App:
in settings.py:
%Vor%in urls.py:
%Vor%Verwandte Frage: Ist ein relativer Pfad in einer CSS-Datei relativ zur CSS-Datei?
Das Problem wird durch Ihre URLconf verursacht, insbesondere das Muster:
%Vor%Dies bedeutet, dass die URL in einem Schrägstrich enden muss, damit sie mit diesem Muster übereinstimmt. d. h. die folgende URL stimmt nicht mit überein: (weil sie keinen abschließenden Schrägstrich hat)
%Vor% Das Seltsame ist, dass es funktioniert . Der Grund dafür ist Djangos Einstellung APPEND_SLASH
:
Bei Festlegung auf "True" wird, wenn die Anforderungs-URL keinem der Muster in der URL-Konfiguration entspricht und nicht in einem Schrägstrich endet, eine HTTP-Umleitung an dieselbe URL mit einem angehängten Schrägstrich ausgegeben. Beachten Sie, dass die Weiterleitung dazu führen kann, dass Daten, die bei einer POST-Anfrage gesendet wurden, verloren gehen.
Wenn Ihr Browser also eine Anfrage an:
sendet %Vor% ... Django kann es nicht mit einer der URLs abgleichen und gibt eine Weiterleitung an: (weil APPEND_SLASH
standardmäßig auf True gesetzt ist)
Diese neue Anfrage ist erfolgreich und Ihr Browser kann nun die CSS-Datei herunterladen, jedoch endet die Ressourcen-URL der CSS-Datei nun mit einem Schrägstrich. Wenn Ihr Browser die CSS-Regeln verarbeitet und rüberkommt:
%Vor%Es wird versucht, diesen relativen URI dem URI der CSS-Ressource beizugeben. z.B.:
%Vor% Dies wird fehlschlagen, so dass Ihr Browser eine Weiterleitung erhält an: (wieder wegen APPEND_SLASH
)
Aber das wird natürlich auch scheitern.
Ändern Sie Ihr URL-Muster wie folgt: (Beachten Sie das entfernte nachgestellte /
im Muster)
Oder verwenden Sie eine der empfohlenen Methoden :
%Vor%... oder:
%Vor%Tags und Links django django-static