Referenzieren von Bildern in CSS mit relativen Pfad funktioniert nicht in Django

8

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:

%Vor%

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/

gefunden

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?

    
Yifu 12.06.2011, 05:53
quelle

1 Antwort

9

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)

%Vor%

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 )

%Vor%

Aber das wird natürlich auch scheitern.

Lösungen

Ändern Sie Ihr URL-Muster wie folgt: (Beachten Sie das entfernte nachgestellte / im Muster)

%Vor%

Oder verwenden Sie eine der empfohlenen Methoden :

%Vor%

... oder:

%Vor%     
bradley.ayers 12.06.2011, 21:31
quelle

Tags und Links