0

[为更清晰而编辑]我的问题更多是架构问题,我想了很多方法来做我需要做的事情,但不知道哪个是正确的/最好的,所以就在这里。

我使用ajax从远程网络服务器获取一些xml,然后用jquery解析它。我想要的是,当页面第一次呈现时,我有一些“正在加载”的gif,一个用于我将要进行的每个ajax请求,然后当数据被提取,它出现在页面上。

事情是我想让 jquery 将这些数据发布到视图以呈现它。(这适用于将使用我的应用程序的其他开发人员,他们不太了解 javascript,更喜欢编写 python/html 来编写他们希望数据显示的方式并使用 django 模板引擎进行自定义标签和东西)

问题是如何区分第一次加载没有数据的页面和第二次加载有数据的页面。我不想随时刷新页面。我想在模板中有一些东西,比如:

{% 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 标记和上下文字典。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 回答