如何在jQuery/Javascript中使用Django模板标签?

28

我可以在JavaScript中使用Django的模板标签吗?例如在jQuery中使用{% form.as_p %}来动态添加表单到页面中。


2
我猜你自己尝试一下就会知道了 :) - Konstant
4个回答

36

是的,我经常这样做。你的JavaScript必须通过Django提供,但如果你只是将它放在HTML头部作为内联JavaScript,那么就没问题了。

例如:我使用这个方法给我使用的动态表单集加前缀。

{% extends "base.html" %}
{% block extrahead %}
<script type="text/javascript">
$(document).ready(function() {
    {# Append fields for dynamic formset to work#}
    {% for fset, cap, _, tid in study_formsets.fset_cap_tid %}
        $(function() {
            $('.form_container_{{ tid }}').formset({
                        prefix: '{{ fset.prefix }}',
                        formCssClass: '{{ tid }}',
                        extraClasses: ['myrow1', 'myrow2']
                    });
        });
    {% endfor %}
});
</script>
{% endblock %}

请注意,我在 "base.html" 中有一个 HTML head 标签,在其中加载了 jQuery 库,并包含了 {% block extrahead %}{% endblock %}


有没有现代的方法来做到这一点?在HTML中混合JavaScript并不完全是无侵入性的。 - Mejmo
1
@Mejmo - 嗯,你可以通过django动态地提供你的javascript文件(例如,起草一个js文件的模板,生成一个视图,将其添加到urls.py中)。当然,这可能会比内联JS效率低,并且可能不太可管理(每个页面加载需要两个动态处理的文件)——除非你需要在许多模板中使用相同的动态JS。实际上,最好的方法是拥有静态JS文件,它们可以操作DOM中的数据(可能最初是隐藏的)或以json数据动态提供。如果你需要在JS中编写模板标签逻辑,请直接在JS中编写。 - dr jimbob
1
请检查以下内容:<script> $(document).ready(function(){ $('#delete').submit.function(e){ e.preventDefault(); var station_id = {{ station.id }} $.ajax({ type: 'POST', url: '/station/' + station_id, headers: {'X_METHODOVERRIDE': 'DELETE'} }); }); }); </script> 你认为我在这个脚本里使用Django模板语言 (var station_id = {{ station.id }}) 会有任何问题吗? - Afzal S.H.
请查看https://dev59.com/cYvda4cB1Zd3GeqPXEa6,我在那里提出了具体的问题。特别是请查看更新部分。 - Afzal S.H.
2
最初我只是使用普通的{{template_tags}},没有在它们周围加上 ' ',但看到了你的解决方案,这解决了我的问题。因此,如果您在 JQuery 中使用模板标签,请不要忘记将它们用单引号括起来! - Peter Kaminski

15
无法在JavaScript代码中使用Django的模板标签,如果这就是您的意思。所有Django变量和逻辑在模板被渲染并将HttpResponse发送到客户端后都不再存在。当Javascript执行时,客户端(浏览器)没有概念您使用模板呈现的变量(例如“form”)。
您可以做的是使用由Django模板呈现的HTML块来让Javascript修改您的HTML页面。
如果您想在客户端生成HTML,则建议查看客户端模板库(例如JQuery Templates-使用带有{%verbatim%}模板标记)。

0
如果你想在渲染的JavaScript中使用变量,我认为这是一个不好的主意。但是,如果你只是想为你的视图、媒体和静态文件生成URL,我经常这样做。
请看这个GitHub链接:jscssmin

-1

是的,你可以使用`

示例: `{{ user.username }}`

请确保这不是单引号,而是`(反引号/重音符号)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接