Django模板变量和Javascrip

2024-04-25 22:01:51 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用Django模板呈现器呈现页面时,我可以传入一个包含各种值的字典变量,以便使用{{ myVar }}在页面中操作它们。

在Javascript中是否有方法访问同一个变量(也许使用DOM,我不知道Django如何使变量可访问)?我希望能够使用基于传入变量中包含的值的AJAX查找来查找详细信息。


Tags: django方法模板字典详细信息ajax页面javascript
3条回答

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

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

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

这将为您提供“动态”javascript。

注意检查ticket#17419以讨论如何将类似的标记添加到Django core中,以及通过将此模板标记与用户生成的数据一起使用而引入的可能的XSS漏洞。^来自amacneil的{a2}讨论了票据中提出的大多数问题。


我认为最灵活和方便的方法是为您想在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>

对我有效的解决方案是在模板中使用隐藏的输入字段

<input type="hidden" id="myVar" name="variable" value="{{ variable }}">

然后以这种方式获取javascript中的值

var myVar = document.getElementById("myVar").value;

相关问题 更多 >

    热门问题