2010-02-05 41 views
4

我想從我的settings.py中將一些變量設置爲,這些變量在我的項目中運行的每個javascript都可用。從Django到javascript的全局變量

達到此目的最優雅的方法是什麼?

現在我能想到兩個:

  • 寫一個上下文處理器,並在基本模板聲明的全局。所有模板都必須擴展基本模板。

  • 在動態生成的.js文件(通過某種視圖)中聲明這些全局變量,並在基本模板中使用<script>標記加載此文件。所有模板都必須擴展基本模板。

我可以在沒有基礎模板的情況下做到嗎?

+0

爲什麼你沒有基礎模板?使用HTML文檔類型和其他標準材料製作標準基本模板有什麼不妥? – 2010-02-05 14:53:22

回答

6

我會使用選項1.在任何情況下都應該使用基本模板,並且上下文處理器可能是獲取變量的最佳方式。

+0

+1:非常簡單,很容易擴展。所有的模板*都必須*擴展一個基本模板,所以這個效果很好。 – 2010-02-05 14:52:54

+0

+1:同意。 Django的模板系統足以充分發揮其潛力;) – NilColor 2010-02-05 15:42:20

+1

@DanielRoseman應該使用CSS選擇器來獲取這些變量嗎?是否有任何安全/安全問題? – Medorator 2014-05-26 09:06:56

1

我對django不熟悉,所以這可能是完全不正確的。

你能寫出變量隱藏HTML頁面上的字段。這將允許你從JavaScript訪問它們,或者如果你需要,可以在表單文章中使用它們。

0

我有同樣的問題,我使用了一個醜陋的解決方案與「重構以後」的說明。
我在我的基本模板的頂部放置了一個js_top塊,然後任何需要額外包含或js變量集的模板都可以使用該塊。
所以,我有東西像這樣:

{% block js_top %} 
    <script src="/jquery.useless-plugin.js" type="textjavascript"></script> 
    <script type="textjavascript"> 
     var myVar = {{my_variable.propriety}}; 
    </script> 
{% endblock %} 

當然,如果你有需要的一個更強大和更少的「一次性」系統,我會用生成的JS去。