【问题标题】:Django templates: optimizing the update of a templateDjango模板:优化模板的更新
【发布时间】:2012-12-19 06:48:52
【问题描述】:

可以肯定的是一个菜鸟问题。我有一个包含多个移动部分的模板,我正在寻找构建这个 django response 的最佳方式的方向。

考虑这样的模板:

<div>显示complex_calculation_1的结果+一个button更新这个div的数据<\div>

<div>显示complex_calculation_2的结果+一个button更新这个div的数据<\div>

<div>显示complex_calculation_3的结果+一个button更新这个div的数据<\div>

<div>显示complex_calculation_4的结果+一个button更新整个页面<\div>

每个计算的输出很容易保存。目前,每次推送 button 时,我都会重新计算特定的计算,然后重新渲染整个页面,这会在所有部分中导致多次 forloop 迭代。

我希望能够以最佳方式缓存模板的每个部分(那会是什么?),提供一个response,它只更新需要更新的页面部分并呈现更新的适当的页面。

所以我的问题是:我应该如何继续以能够创造最大效率的方式处理这个问题?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    使用jqueryajax 仅更新模板的特定部分,假设:

    <div>
        <span id="data_1"> Display results of complex_calculation_1 + </span>
        <button class="data_btn" span_id="data_1">Update</button>
    <\div>
    
    <script>
     $('.data_btn').click(function(){
        // send post data which you need in `data` variable
        $.ajax({
            type: 'POST',
            url: '{% url 'url_name_for_your_view_here' %}',
            data: {'csrfmiddlewaretoken': '{{csrf_token}}'},
            dataType: "text",
            success: function(response) {
                $($(this).attr('span_id')).text(response.data);
                //where response.data is the data which you want to display
            },
            error: function(rs, e) {
                alert(rs.responseText);
                alert('Oops! something went worng..');
             }
         });
      });
    </script>
    

    【讨论】:

    • 所以如果我最初在我的上下文字典中包含'data1':data1,这个脚本会更新data1,但是它如何在不调用关联视图的情况下更新html?我想我要问的是function(response) 在这个脚本中做了什么?
    • @Cole 请了解 ajax 如何与 django 一起工作。阅读一些教程。查看this教程,你就会明白我贴的sn-p了。
    • 检查url 变量,它实际上是在调用关联视图,您必须将url_name_for_your_view_here 替换为有效的url 名称。然后你的视图会返回一些东西,所以success 函数是CallBack,它将从你的视图中得到响应。并在 success 函数中更新您需要在 html 中更新的内容。
    【解决方案2】:

    如果您可以假设该网站访问者启用了 JavaScript,您可以使用 ajax, 发送您的数据,在单独的视图中执行计算并将其发布回您的站点 - 这样整个页面就不会重新加载,并且看起来非常优雅。

    当然,任何访问者都应该能够使用您的网站,即使他的浏览器不支持 JavaScript,但是,如果只是少数访问者,那么我就不会为这些罕见的情况进行优化,只是离开照原样。

    我不确定 Django 中的缓存机制,所以如果你真的不能依赖 Ajax,我不会提出任何建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多