如何在Django模板的JavaScript中使用"views.py"中的变量?
19 个回答
80
对我有效的一个解决办法是使用模板中的隐藏输入字段。
<input type="hidden" id="myVar" name="variable" value="{{ variable }}">
然后用这种方式在JavaScript中获取这个值,
var myVar = document.getElementById("myVar").value;
89
注意: 请查看票据 #17419,里面讨论了在Django核心中添加类似标签的事情,以及使用这个模板标签处理用户生成的数据可能带来的XSS安全漏洞。amacneil的评论讨论了票据中提到的大部分问题。
我认为最灵活、最方便的方法是为你想在JavaScript代码中使用的变量定义一个模板过滤器。这样可以确保你的数据被正确处理,并且可以与复杂的数据结构一起使用,比如 dict
(字典)和 list
(列表)。
下面是一个模板过滤器的例子:
// myapp/templatetags/js.py
from django.utils.safestring import mark_safe
from django.template import Library
import json
register = Library()
@register.filter(is_safe=True)
def js(obj):
return mark_safe(json.dumps(obj))
这个模板过滤器会把一个变量转换成JSON字符串。你可以这样使用它:
// myapp/templates/example.html
{% load js %}
<script type="text/javascript">
var someVar = {{ some_var | js }};
</script>
402
这里的 {{variable}}
是直接放到HTML里去的。你可以查看源代码;它并不是一个“变量”或者类似的东西。它只是被渲染出来的文本。
不过,你可以把这种替换放到你的JavaScript里。
<script type="text/javascript">
var a = "{{someDjangoVariable}}";
</script>
这样你就得到了“动态”的JavaScript代码。