Django Template Variables 和 Javascript
2022-08-30 00:14:38
当我使用Django模板渲染器渲染页面时,我可以传入包含各种值的字典变量,以使用.{{ myVar }}
有没有办法在Javascript中访问相同的变量(也许使用DOM,我不知道Django如何使变量可访问)?我希望能够根据传入的变量中包含的值使用AJAX查找来查找详细信息。
当我使用Django模板渲染器渲染页面时,我可以传入包含各种值的字典变量,以使用.{{ myVar }}
有没有办法在Javascript中访问相同的变量(也许使用DOM,我不知道Django如何使变量可访问)?我希望能够根据传入的变量中包含的值使用AJAX查找来查找详细信息。
直接替换到 HTML 中。做一个视图源;它不是一个“变量”或类似的东西。它只是呈现的文本。{{variable}}
话虽如此,你可以将这种替换放入你的JavaScript中。
<script type="text/javascript">
var a = "{{someDjangoVariable}}";
</script>
这给了你“动态”的javascript。
谨慎查看工单 #17419,讨论如何将类似的标签添加到 Django 核心,以及将此模板标签与用户生成的数据结合使用时可能引入的 XSS 漏洞。来自amacniel的评论讨论了票证中提出的大多数问题。
我认为最灵活、最方便的方法是为要在 JS 代码中使用的变量定义一个模板过滤器。这使您可以确保正确转义数据,并且可以将其用于复杂的数据结构,例如 和 。这就是为什么我写这个答案,尽管有一个被接受的答案,有很多赞成票。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>