【问题标题】:Use Django template tags in jQuery/Javascript?在 jQuery/Javascript 中使用 Django 模板标签?
【发布时间】:2011-08-25 22:03:59
【问题描述】:

我可以在 Javascript 中使用 Django 的模板标签吗?就像在 jQuery 中使用 {% form.as_p %} 来动态地向页面添加表单一样。

【问题讨论】:

  • 我想你试试就知道了:)

标签: javascript jquery django django-templates


【解决方案1】:

是的,我经常这样做。您的 javascript 必须通过 django 提供,但如果您只是将其作为内联 javascript 放在 html 标头中,您就可以了。

例如:我用它在我使用的动态表单集上添加前缀。

{% 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 - 好吧,你可以让 django 动态地提供你的 javascript 文件(例如,为 js 文件起草一个模板,为它生成一个视图,将它添加到你的 urls.py 中)。诚然,这可能会比内联 JS(每个页面加载需要两个动态处理的文件)效率低且易于管理 - 除非您在许多模板中需要相同的动态 JS。确实,最好的方法是使用静态 JS 文件,这些文件可以操作来自 DOM 的数据(可能最初是隐藏的)或在 json 数据中动态提供。如果在JS中需要模板标签逻辑,就用JS写吧。
  • 请检查一下; &lt;script&gt; $(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'} }); }); }); &lt;/script&gt; 你看到我在这个脚本 (var station_id = {{ station.id }}) 中使用 Django 的模板语言不起作用的任何原因。
  • 请查看stackoverflow.com/questions/30461839/… 我有特定的问题。尤其是看到更新。
  • 最初只是使用普通的 {{template_tags}} 而没有在它们周围放置 ' ',但是看到了您的解决方案并解决了我的问题。因此,如果您在 JQuery 中使用模板标签,请不要忘记将它们用单引号括起来!
【解决方案2】:

如果这就是你的意思,你不能在你的 Javascript 代码中使用 Django 的模板标签。在模板被渲染并且 HttpResponse 被发送到客户端之后,所有的 Django 变量和逻辑都停止存在。在 Javascript 执行的那一刻,客户端(浏览器)不知道您渲染模板时使用的变量(例如“表单”)。

您可以做的是让 Javascript 使用您的 Django 模板呈现的 HTML 块来修改您的 HTML 页面。

如果您想在客户端生成 HTML,我建议您查看客户端模板库(例如 JQuery Templates - 使用带有 {% verbatim %} templatetag 的那些)。

【讨论】:

    【解决方案3】:

    如果您想在渲染的 javascript I 中使用变量(这是我的选择),认为这是个坏主意。但是,如果您只想为您的视图、媒体和静态文件生成 URL,我会经常这样做。

    看看这个github:jscssmin

    【讨论】:

      【解决方案4】:

      是的,你可以使用`

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

      确保这不是单引号,而是 '(反引号/反引号)

      【讨论】:

        猜你喜欢
        • 2015-04-13
        • 2014-03-20
        • 2015-12-23
        • 2020-02-08
        • 1970-01-01
        • 2011-08-16
        • 2018-08-24
        • 2016-09-02
        相关资源
        最近更新 更多