0

確かに初心者の質問。私はいくつかの可動部分を持つテンプレートを持っており、この django を構築するための最良の方法についての方向性を探していresponseます。

次のようなテンプレートを検討してください。

<div>buttonこの div のデータを更新するために、complex_calculation_1 + a の結果を表示します<\div>

<div>complex_calculation_2 + a の結果を表示buttonして、この div のデータを更新します<\div>

<div>buttonこの div のデータを更新するために、complex_calculation_3 + a の結果を表示します<\div>

<div>complex_calculation_4 + a の結果を表示buttonしてページ全体を更新する<\div>

各計算の出力は簡単に保存できます。現在、 a が押されるたびにbutton、特定の計算を再計算してからページ全体を再レンダリングするため、forloopすべての部分で多くの反復が発生します。

テンプレートの各部分を最適な方法でキャッシュし (それは何でしょうか?)、responseページの更新が必要な部分のみを更新し、更新されたページを適切にレンダリングする を提供したいと考えています。

だから私の質問は次のとおりです。最大の効率を生み出す方法でこれを処理するにはどうすればよいですか?

4

2 に答える 2

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>
于 2013-01-04T20:15:30.540 に答える
0

そのサイトの訪問者が JavaScript を有効にしていると仮定できる場合、ajaxを使用してデータを送信し、別のビューで計算を実行してサイトに戻すことができます。そうすれば、ページ全体がリロードされず、非常にエレガント。

もちろん、ブラウザが JavaScript をサポートしていなくても、すべての訪問者があなたのサイトを使用できるはずですが、それが少数の訪問者にすぎない場合は、このようなまれなケースに合わせてサイトを最適化する必要はなく、そのままにしておきます。は。

Django のキャッシング メカニズムについてはよくわからないので、本当に Ajax に頼れないのであれば、何も提案しません。

于 2013-01-04T20:04:43.027 に答える