如何使用AJAX更改查询集?

2024-03-28 12:17:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想能够改变我的评论查询集没有页面刷新。以下是查询集:

comment_list = Comment.objects.filter().order_by('-score__upvotes')
new_comments_list = Comment.objects.filter().order_by('-timestamp')

那么我的模板是

^{pr2}$

有没有方法可以使用AJAX(无页面刷新)将{% for comment in comment_list %}更改为{}?在

或者可能将comment_list的值改为等于Comment.objects.filter().order_by('-timestamp')?在

编辑

视图:

^{3}$

ajax调用:

$('.comments_new').on('click', function() {
    $.ajax({
        type: 'GET',
        url: '/new_comments/',
        data: {
            csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(),
        },
        success: function (data) {
            console.log(data.comment_list); // undefined
        }
    })
});

Tags: newdatabyobjectscommentorderajaxfunction
1条回答
网友
1楼 · 发布于 2024-03-28 12:17:55

我猜,你是在尝试在页面呈现时使用comment_list,在不修改的情况下使用ajax的new_comment_list

{% for comment in comment_list %}
    {{ comment }} 
{%  endfor %}

代码的问题是comment_list是一个queryset,当页面呈现时(在通过Django模板引擎之后),它在服务器端进行计算,Javascript无法理解queryset。它可以理解HTML或JSON。所以,您必须修改脚本,以便它为ajax请求返回HTML或JSON。在

我建议你把你的观点改写成:

^{pr2}$

编写你的前端来生成这个HTML代码。 下面是一个链接,它对使用ajax进行渲染有更好的解释:Returning Rendered Html via Ajax

相关问题 更多 >