如何在不重定向到新页面的情况下调用Django函数?

时间:2017-03-24 15:15:12

标签: javascript jquery python django django-views

我正在撰写文章的书签。我想在单击按钮Add To Bookmark时在书签中添加该文章。

使用Django,传统的方法是通过传递文章的slug并处理views.py中的信息来重定向到书签页面。

目前,在views.py的书签页面功能下,我有一组代码将文章保存到当前用户的书签对象,

user_instance        = get_object_or_404(User,username = request.user.username)
userprofile_instance = get_object_or_404(UserProfile,user = user_instance)
new_readlater        = Bookmarks.objects.get_or_create(user = userprofile_instance, article_slug = slug)

其中,

  • User是内置的Django用户。
  • UserProfile是扩展User模型。
  • Bookmarks是与UserProfile的OneToMany关系。

    class Bookmarks(models.Model):
        user = models.ForeignKey(UserProfile, default = 1)
        read_later = models.CharField(default = "", max_length = 120) 
    

我知道,可以通过重定向到书签页面网址来调用书签功能,因此可以保存书签。但我不想重定向到书签页面,而是希望将其添加到文章页面本身。如何调用相同的书签保存功能来处理按钮单击时的书签信息?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你需要做的是在网页上提交按钮时进行ajax POST调用:

$.ajax({
        url: "url_to_call",
        type: "POST",
        data: {  csrfmiddlewaretoken: "{{ csrf_token }}", //django needs this
                 data_item: mydata},
        timeout:0,
        success: function(data){//do something when done
                          //data will be the string returned by HTTPResponse
        }
}

在你的views.py中返回HTTPResponse

response = HttpResponse("Here is some data to send back to the webpage")

这将使您保持在同一页面,而无需重定向