如何在Django中使用基于类的视图for html按钮?

2024-04-25 21:39:47 发布

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

我写了以下观点:

class UserDeleteView(TemplateView):

    template_name = "user/user_delete.html"
    form_class = UserDeleteForm
    model = User

    def delete_my_account(self):
        user = get_user(self.request).user
        if user.is_authenticated():
            logout(self.request)
            user.delete()
            return redirect('/')

1)如何在user/user_delete.html中调用该方法?在

我认为我的form\u class属性是不必要的,因为我使用了TemplateView。在

2)代码将UserDeleteView用于forms.py,看起来如何?如何创建删除按钮?在


Tags: nameselfformmodelrequesthtmltemplatedelete
2条回答

一种方法就是这样

class UserDeleteView(View):
    def post(self, request, object_id, *args, **kwargs):
        '''retrieve the object for the given object_id and delete it'''
        return redirect(url_to_be_redirected_to)

对于一个基本的Django视图来说,这已经足够了。在您的HTML模板中,假设您有一个用于删除对象的按钮,并假设它将id属性设置为deleteButton。您必须使用javascripting来启动删除。例如,你的按钮就像

^{pr2}$

所以你可以写这样的东西

$("body").on("click", "a#deleteButton", function(event){
    event.preventDefault();

    var url = $(this).attr("href");
    var csrf = fetch_csrf_value_and_assign_here;
    $.post(url, {csrfmiddlewaretoken:csrf}, function(response){});
});

PS:这是做你想做的事情的最起码的方法。而且,这不是唯一的方法。但这应该给你另一个角度来看待你想要实现的目标。在

编辑1: 我展示的视图的url配置示例。在

    url(r'delete/(?P<object_id>\d+)/$',
          views.UserDeleteView.as_view(), name='delete-user')

然后在你的HTML中,你可以像

<a href="{% url 'appname:delete-user' object_id_you_want_to_delete %}" id="deleteButton">Delete</a>

你需要在你的模板中有你想要删除的对象的id,我相信你是这样做的。在

这可能不是您要寻找的答案,但是您可以使用DeleteView,而不是只需要一个成功url的TemplateView。在

您可以在这里查看它的默认函数方法:DeleteView

{a2和文档:^

class UserDeleteView(LoginRequiredMixin, DeleteView):

    template_name = "user/user_delete.html"
    form_class = UserDeleteForm
    model = User

    def get_success_url(self):
        # logout(self.request)
        return redirect('/')

不确定在删除登录用户的情况下这是否有效。我很抱歉,因为我本可以简单地提到这一点而不在评论中给出代码,但我对此没有足够的声誉。在

相关问题 更多 >