如何选择django模板变量并用jquery更改它们的值?

时间:2013-10-06 10:33:46

标签: jquery ajax django django-templates

在模板中,我正在显示名为posts的数据库对象,如下所示:

{% for post in posts %}
....
....
<div class="pull-left">
      <span class="badge" >
          <p class="post-points">{{post.points}}</p>
      </span>
     </div>
...
...
    {% endfor %}

现在使用ajax请求ID更改特定post.points对象的post属性。我设法发送和接收ajax请求,但无法理解如何选择post对象并更改其post.points值。

出于解释目的,假设这是处理ajax请求后服务器的json响应:

{'post_id': some post's id,
'post_points': some value}

希望我能清楚自己。请帮忙。

1 个答案:

答案 0 :(得分:1)

我可能会选择这样的东西:

<p class="post-points" id="{{ post.pk }}">{{ post.points }}</p>

然后我有一个锚从每个dom elemnt抓住post pk。您将它与ajax一起发送,以便服务器知道您正在谈论的帖子,然后将<p>标记中的值替换为响应。

修改

假设您点击任意一点时发生此调用:

$('.post-point').on(click, function() {
    var point = $(this),
        pk = point.attr('id'),
        csrf = getCookie('csrftoken'); 

    data = {'pk': pk, 'csrfmiddlewaretoken': csrf }

    $.ajax({
        url: 'post_url',
        data: data,
        type: 'post',
        success: function(data) {
            point.html(data);
        }      

    });
});

现在这是一个非常通用的示例,您可能需要对其进行大量更改。也许您需要徽章作为可点击对象,您可能想要发送更多数据。我猜你的意思是发送一个带有'post'类型的ajax请求,因为你提到数据正在改变,在这种情况下你也必须包含csrf令牌(我正在使用的函数getCookie取自django文档,请参阅here),您可能希望将其作为标题传递,而不是作为帖子数据的一部分。

此外,返回的数据不一定是json,它取决于你在客户端需要做什么 - 如果发送一个数字或一些文本很简单,那么你可以使用简单的HttpResponse,但如果它是你想要使用javascript迭代的对象,你想在服务器端使用json.dumps,然后在服务器端使用$.parseJSON(data)

另外,不要忘记创建一个函数,以便在ajax请求失败时发生(google it)。我想你可以从这里拿起来