【问题标题】:How to select django template variables and change their value with jquery?如何选择 django 模板变量并使用 jquery 更改它们的值?
【发布时间】:2013-10-13 00:33:58
【问题描述】:

在模板中,我正在显示名为 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 对象的 post.points 属性。我已经设法发送和接收 ajax 请求,但无法理解如何选择 post 对象并更改其 post.points 值。

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

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

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

【问题讨论】:

    标签: jquery ajax django django-templates


    【解决方案1】:

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

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

    然后我有一个锚来从每个 dom 元素中获取帖子 pk。您将它与 ajax 一起发送,因此服务器知道您在谈论什么帖子,然后您将 &lt;p&gt; 标记中的值替换为响应。

    编辑

    假设当您单击任意点时会发生此调用:

    $('.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)。我想你可以从这里取走它

    【讨论】:

    • 伙计..这就是我想要做的!你能告诉我如何在代码中做到这一点吗?我有来自服务器的 post.points,如何更新特定帖子的值?
    • 谢谢!答案肯定有帮助。你能解释一下这一行吗:point = $('#'+pk)
    • 这只是获取特定元素的问题(this 在成功调用中不起作用,除非你告诉它指向什么),这可能有点令人困惑。我把那部分拿出来,选择了一个更简单的解决方案,希望它能让事情变得更清楚
    • 当然,很高兴能帮上忙 :-)
    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2012-03-22
    • 2019-03-05
    相关资源
    最近更新 更多