0

[より明確にするために編集] 私の問題はアーキテクチャの問題です。必要なことを行うための多くの方法を考えていますが、どれが正しい/最適かを判断できません。

ajaxを使用してリモートWebサーバーからいくつかのxmlをフェッチし、jqueryで解析します。ページが最初にレンダリングされるときに、作成するajaxリクエストごとに1つずつ、「ロード中」のGIFがあることです。データが取得され、ページに表示されます。

問題は、jquery がこれらのデータをビューに投稿してレンダリングするようにしたいということです。(これは、私のアプリを使用する予定の他の開発者で、JavaScript についてあまり知らず、python/html を記述してデータを表示したい方法でコーディングし、カスタムのために django テンプレート エンジンを利用することを好む開発者向けです。タグなど)

問題は、データがないページの最初の読み込みと、データがある 2 回目の読み込みをどのように区別できるかということです。いつでもページを更新する必要はありません。テンプレートに次のようなものを入れることを考えました:

{% block content %}
{% if not data %}
it's the first loading of the page,we have to fetch the data.
<p> My first item : some loading logo </p>
<script>
call a static script that gets the data then appends it to the html/post it back.
</script>
{% endif %}
{% if data %}
the data had already been fetched so we can display it, something like : 
<p> My first item : {{first item}} </p>
{% endif %}
{% endblock %}

私は他の質問を見てきましたが、通常はデータベースからのデータで更新されています。質問が具体的すぎる場合は申し訳ありませんが、コードを書き始める前に問題を適切に設計したいと思っており、少し迷っています。ありがとうございました 。

4

2 に答える 2

0

Django タグとコンテキスト dict は、テンプレートが初めてレンダリングされるときに解決されます。AJAX は、ページをリロードせずにデータをポスト/フェッチするために使用されるため、AJAX リクエストの後、ページはリロードされず、django テンプレート レンダラーは更新されたデータを表示できません。

ただし、jQuery get() または post() を使用して、レンダリングされたテンプレートを他の django ビューから取得し、現在のページに統合することができます。

このテンプレートは、要求に応じて /ajax/fetch/ でレンダリングする必要があります。

{% block content %}
{% if not data %}
    it's the first loading of the page,we have to fetch the data.
    <p> My first item : some loading logo </p>
    <script>
    call a static script that gets the data then appends it to the html/post it back.
    </script>
{% else %}
    the data had already been fetched so we can display it, something like : 
    <p> My first item : {{first item}} </p>
{% endif %}
{% endblock %}

そして、これはあなたのメインページにあります:

<script [include jquery here]></script>
<script>         
    $(function(){
        $("#get_data_please").click(function(){
            $.get('/ajax/fetch/', function(data) {
                // this is called on ajax success
                $('#ajax_result').html(data);
            });
        });
    });
</script>
...
<a href="#" id="get_data_please">Click to get data</a>
<div id="ajax_result">
    Here all will be loaded
</div>
于 2013-08-23T12:19:47.643 に答える
0

Html に変換するためだけに、解析されたデータをサーバーに送り返したいのはなぜですか?

これを行うことができる何らかの種類の Javascript ベースのレンダリング ライブラリを使用しないのはなぜですか? 追加のリクエストを実行する必要がないため、アプリケーションのパフォーマンスが向上します。

于 2013-08-23T10:01:26.147 に答える