Django Template Variables 和 Javascript

当我使用Django模板渲染器渲染页面时,我可以传入包含各种值的字典变量,以使用.{{ myVar }}

有没有办法在Javascript中访问相同的变量(也许使用DOM,我不知道Django如何使变量可访问)?我希望能够根据传入的变量中包含的值使用AJAX查找来查找详细信息。


答案 1

直接替换到 HTML 中。做一个视图源;它不是一个“变量”或类似的东西。它只是呈现的文本。{{variable}}

话虽如此,你可以将这种替换放入你的JavaScript中。

<script type="text/javascript"> 
   var a = "{{someDjangoVariable}}";
</script>

这给了你“动态”的javascript。


答案 2

谨慎查看工单 #17419,讨论如何将类似的标签添加到 Django 核心,以及将此模板标签与用户生成的数据结合使用时可能引入的 XSS 漏洞。来自amacniel的评论讨论了票证中提出的大多数问题。


我认为最灵活、最方便的方法是为要在 JS 代码中使用的变量定义一个模板过滤器。这使您可以确保正确转义数据,并且可以将其用于复杂的数据结构,例如 和 。这就是为什么我写这个答案,尽管有一个被接受的答案,有很多赞成票。dictlist

下面是模板筛选器的示例:

// 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>