2013-07-27 27 views
4

因此,我正在開發一個Django項目,並試圖弄清楚如何讓Javascript能夠從我的靜態目錄中呈現圖像。我修改了我的settings.py以從myproject/static加載靜態文件(圖像,js等),以及從myproject/templates加載我的模板。現在,在每個模板,我有以下線的頂部:Django中的Javascript引用靜態圖像

{% load staticfiles %} 

,讓我加載圖像這樣的模板:

<img src="{% static "images/someImage.jpg" %}" width="65" height="36" alt="SomeImage"/> 

現在,這個工作得很好 - 圖像加載並按頁面上的預期呈現。但是我想做到這一點(當然,我的隊友,但無論如何):

<p><script src="{% static "js/getHeader.js" %}" type="text/javascript"></script></p> 

這條線在同一個文件是與上述兩行。該getHeader.js文件:

var time = new Date(); 
var month = time.getMonth(); 
var day = time.getDate(); 
var year = time.getFullYear(); 

if (month == 1 & day == 23 & year == 2013) { 
    document.write('<img src="{% static "images/anotherImage.png" %}" width="680" height="210" />'); 
} else { 
    document.write('<img src="{% static "images/yetAnotherImage.png" %}" width="680" height="210"/>'); 
} 

只是爲了澄清,這個想法是打印一些預定義的一天不同的頁眉。我試圖保留任何圖像/ html從顯示模板的Python代碼中分離出來,所以我不想只傳入圖像名稱作爲參數。代碼本身運行良好,但是當頁面加載時,alt名稱會出現,但圖像本身不會;只是其中一個通用的空「圖像未找到」框。

這可能是值得一提的,如果我把這個Javascript內聯到實際的HTML頁面,圖像呈現很好。此外,這是在一個開發環境中,而不是生產 - 我將在後面處理這個問題。

什麼給?我認爲,由於該行應該被寫入包含上面的「load staticfiles」行的文檔中,因此該圖像將僅與HTML的其餘部分一起呈現。任何建議如何解決這個問題或以不同的方式完成它將不勝感激!

回答

8

getHeader.js與django無關。這只是一個由瀏覽器加載的文本文件。因此它不知道像{%static%}或{{foo}}這樣的django語法。

有一些方法可以解決這個問題。常用的方法是定義一個全局JavaScript變量,它是您的STATIC_URL,然後您可以在未來的JS文件中引用它。

<script type="text/javascript"> 
    DJANGO_STATIC_URL = '{{ STATIC_URL }}'; 
</script> 

另一種方法是使用類似Django Compressor可通過Django的模板系統呈現JS。 https://github.com/jezdez/django_compressor

+0

謝謝!這就是我所需要的 – drodman

相關問題