2015-01-13 3 views
10

In meinem script.js:Django {% static 'Pfad' %} in JavaScript-Datei

pic.src = "/static/photos/1.jpg"; // This works 
pic2.src = "{% static 'photos/1.jpg' %}" // Does not work 

Warum in der Welt dies geschieht? Da in meinem home.html, das {% static 'Pfad' %} funktioniert:

{% load staticfiles %} 
<script src="{% static 'script.js' %}"></script> // This works 

Und ist es {% Last Static%} oder {% Last statisch%}? Beides funktioniert für mich, script.js ist geladen.

+0

Ja, weil die HTML-Datei eine Vorlage ist, aber die statischen Dateien nicht als solche behandelt werden. –

+0

Danke für Ihre schnelle Antwort Simeon! So pic.src = "static/fotos/1.jpg" ist der einzige Weg? – lucahuy

+0

Wenn Sie wirklich möchten, dass Ihr Javascript aus Vorlagen/Ansichten gerendert wird, könnten Sie das einfach tun. Aber es ist wahrscheinlich nicht das, was du willst. Wahrscheinlicher ist, dass der Hauptteil Ihrer js statische Dateien sein und dann am Ende einer Vorlage in einem Element

2

Sie können den Pfad in Ihrer Vorlage zuweisen und dann in Ihrer Javascript-Datei verwenden.

Vorlage:

<script> 
    var url = "{% static 'photos/1.jpg' %}"; 
</script> 

Javascript:

pic2.src = url 
3

Wenn Sie viele statische (oder Medien) URLs in Ihre .js Dateien benötigen, könnte dies bequemer sein:

<script> 
    var static_url = "{% get_static_prefix %}"; 
    var media_url = "{% get_media_prefix %}"; 
</script> 

Dann werden beide URLs sind in allen Javascript-Dateien frei verfügbar.

+0

Dies führt zu einem Problem mit Collectstatic bei der Bereitstellung. –

+0

@NK Welche Art von Problem? – knbk

+0

Ich dachte, das Erstellen von URLs wie diesem verursachte das Problem - dass für alle URLs, die nicht mit {% static%} erstellt wurden, die Ressourcen nicht gesammelt wurden. Aber ich habe später festgestellt, dass das Problem etwas anderes war, und diese werden möglicherweise in der Nachbearbeitungsphase gesammelt. –