【问题标题】:Refresh <div> element generated by a django template刷新由 django 模板生成的 <div> 元素
【发布时间】:2011-04-04 18:07:11
【问题描述】:

如何刷新 django 模板中的某个元素?
示例:

{% if object.some_m2m_field.all %}
    <h3>The stuff I want to refresh is below</h3>
    <div id="the-div-that-should-be-refreshed">
    {% for other_object in object.some_m2m_field.all %}
        <a href="www.example.com">{{ other_object.title }}</a>
        &nbsp;
    {% endfor %}
    </div>
{% endif %}

假设页面中的其他一些元素触发了应该刷新上面 div 的 javascript。有没有办法让 django 刷新模板中的这个特定元素?

如果没有,我将不得不使用常规的 JS 或 jQuery 方法对 div 进行猴子修补,而不是使用 django 模板层的强大功能。此外,上面的代码是实际模板的简化,我使用了模板的大部分功能,所以猴子修补生成的 html 将是一场噩梦......

【问题讨论】:

    标签: javascript django html django-templates refresh


    【解决方案1】:

    您可以使用异步请求来填充 div 元素。 异步请求由 Django 使用模板引擎回答。

    在这种情况下,您必须将 div 元素的模板代码外包到单独的模板文件中。

    更新示例:

    Javascript:
    对于异步刷新视图,例如使用 JQuery:

    $.ajax({
      url: '{% url myview %}',
      success: function(data) {
      $('#the-div-that-should-be-refreshed').html(data);
      }
    });
    

    异步视图:

    def myview(request):
        object = ...
        return render_to_response('my_template.html', { 'object': object })
    

    模板:

    {% for other_object in object.some_m2m_field.all %}
        <a href="www.example.com">{{ other_object.title }}</a>
        &nbsp;
    {% endfor %}
    

    【讨论】:

    • 这听起来不错,我没想过使用“子”模板。您能否更具体一点 - 您的意思是什么异步请求以及它将如何启动子模板的重新呈现?
    • 嗨乔纳森,我在回答中添加了一个示例。最好的问候!
    • 这只是一个绝妙的答案。但有一件事,似乎 javascript 没有转义 {% url myview %},这意味着它在没有评估 url 和视图名称的情况下直接请求这个。
    【解决方案2】:

    你可以看看例如。这个Ajax with Django tutorial。无论如何,如上所述,无论视图是在普通请求中调用还是在 ajax 请求中调用,您都可以始终使用 django 的模板引擎!如果您必须更频繁地将 ajax 与 django 一起使用,那么看看 dajax 之类的东西是有意义的,它是 django 的 ajax 库(请查看那里的教程)。

    【讨论】:

    • 为什么有意义?
    猜你喜欢
    • 2021-10-11
    • 2018-10-23
    • 2017-11-16
    • 1970-01-01
    • 2021-08-23
    • 2011-04-03
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多