你實際上不能添加一個變量到JS文件,因爲JS沒有像模板一樣被解析。它是靜態的。您可以在傳遞一個變量的唯一方法是將其包含在模板代碼內聯腳本:
<script type="text/javascript">
var my_variable = '{{ my_variable }}`;
</script>
然而,Django不甚至使用小窗口代碼模板解析器。默認的渲染方法返回直接準備好的HTML。這不是一個真正的問題。你只需要以不同的方式處理它。
因此,首先,您需要實際上能夠在小部件的實例化中接受變量。你能做到這一點,像這樣:
class aCustomWidget(forms.TextInput):
def __init__(self, *args, **kwargs):
self.my_variable = kwargs.pop('my_variable')
super(aCustomWidget, self).__init__(*args, **kwargs)
然後,在你render
方法,您可以訪問實例變量將其添加到您的輸出:
from django.utils.safestring import mark_safe
...
def render(self, name, value, attrs):
output = super(aCustomWidget, self).render(name, value, attrs)
if self.my_variable is not None:
output += u'<script type="text/javascript">var my_variable = "%s";</script>' % self.my_variable
return mark_safe(output)
最後,在你的JS正是利用全球變量。您顯然需要確保您的代碼在頁面完成渲染後運行,以便該變量可用。另外,因爲你在這裏處理全局變量,所以你應該注意你的名字。
謝謝,這是一個非常有用的答案。我會試試這個。 – zallarak
這可行,但是,「%s」編碼爲「var」。有沒有什麼辦法可以防止「從編碼到」,你知道它適用於你的技術? – zallarak
嘗試'mark_safe'。看到更新後的代碼 –