Django 如何使用ajax更新按钮和计数而不重定向?

Django 如何使用ajax更新按钮和计数而不重定向?,django,ajax,django-templates,django-views,Django,Ajax,Django Templates,Django Views,我试图创建喜欢/不喜欢的功能,这样如果用户正在观看视频(例如),页面不会刷新,并使他们丢失视频中的进度。我了解如何修改标记的内容,但不知道如何处理更改按钮文本/url所需的逻辑(例如:如果他们单击“喜欢”,则“喜欢”应变为“不喜欢”,并且“喜欢”的url应更改) 下面是我试图解决这个问题的方法,我还没有找到一种方法将逻辑编码到替换模板中,并删除了以前的内容,所以请原谅我没有发布HTML handle_likes.js (...) // Handle button clicks $(".like-

我试图创建喜欢/不喜欢的功能,这样如果用户正在观看视频(例如),页面不会刷新,并使他们丢失视频中的进度。我了解如何修改
标记的内容,但不知道如何处理更改按钮文本/url所需的逻辑(例如:如果他们单击“喜欢”,则“喜欢”应变为“不喜欢”,并且“喜欢”的url应更改)

下面是我试图解决这个问题的方法,我还没有找到一种方法将逻辑编码到替换模板中,并删除了以前的内容,所以请原谅我没有发布HTML

handle_likes.js

(...)
// Handle button clicks
$(".like-btn").on('click', function(){
    console.log("Like button was clicked!"); // sanity check

    // Get the value of the original button
    if ($(".like-btn").val() == "not-liked") { 
        like_post();

    // I figured I could change the value to change the linked url
    }
    if ($(".like-btn").val() == "is-liked") {
        unlike_post();

    }

});
// Functions to handle likes/dislikes
function like_post(){
    console.log("Like post called...") // sanity check
    $.ajax({
        url: "posting/liking_post/",
        data: {
            post_id : $("#post_id").val(), // Need this to get the post
            post_type : $("#post_type").val() // This too
        },
        success: function(data) {
            $('.like-count').html(data); //Try to update the count of the likes on post
            $('.like-btn').html(data); // Try to change the like button
            },

        // Show error | display in console
        error : function(xhr,errmsg,err) {
            $('#results').html("<div class='alert-box alert radius' data-alert>Please contact an admin; We have encountered an error: "+errmsg+
                " <a href='#' class='close'>&times;</a></div>"); // add the error to the dom
            console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console
        }
    });
};
(...)

我想出来了。我在post类中添加了两个方法,用于检查要“喜欢”的对象的“喜欢”和“不喜欢”模型,并将链接到该对象的用户作为列表返回。(方法如下)我尝试使用
self.likes.filter(object\u id=self.id)
,因为我有很多喜欢的字段(我应该用GenericRelation替换它吗?),但由于某些原因,它不起作用,所以我直接访问模型。 现在,我可以在同一个JavaScript文件中的同一页面上通过ajax处理所有事情。如果用户绕过模板逻辑(尝试多次喜欢或不喜欢…即使他们会得到
唯一约束失败
异常…我是否需要该逻辑?)的逻辑在视图中

对于JavaScript来说,这是一个巨大的胜利:D

类方法

    def get_liked_users(self):
        all_likes = Like.objects.filter(object_id=self.id)
        users = list()
        for like in all_likes:
            users.append(like.user)
        return users
然后在模板里面我做了这个

<!--Like stuff-->
{% if request.user not in post.get_liked_users %}
        <button class="like-post-btn" value="not-liked">Like</button>
{% else %}
        <button class="like-post-btn" value="is-liked">Unlike</button>
{% endif %}
        <div class="like-count">{{post.like_count}}<div>

<!--Dislike stuff-->
{% if request.user not in post.get_disliked_users %}
        <button class="dislike-post-btn" value="not-disliked">Dislike</button>
{% else %}
         <button class="dislike-post-btn" value="is-disliked">Undislike</button>
{% endif %}
        <div class="dislike-count">{{post.dislike_count}}</div>

{%if request.user不在post.get_\u users%}
喜欢
{%else%}
不像
{%endif%}
{{post.like_count}}
{%if request.user不在post.get_disposted_users%}
不喜欢
{%else%}
平淡无奇
{%endif%}
{{post.count}
<!--Like stuff-->
{% if request.user not in post.get_liked_users %}
        <button class="like-post-btn" value="not-liked">Like</button>
{% else %}
        <button class="like-post-btn" value="is-liked">Unlike</button>
{% endif %}
        <div class="like-count">{{post.like_count}}<div>

<!--Dislike stuff-->
{% if request.user not in post.get_disliked_users %}
        <button class="dislike-post-btn" value="not-disliked">Dislike</button>
{% else %}
         <button class="dislike-post-btn" value="is-disliked">Undislike</button>
{% endif %}
        <div class="dislike-count">{{post.dislike_count}}</div>