在基于django类的视图中添加其他参数

时间:2016-04-20 15:05:58

标签: python django

首先,我承认我在django中使用CBV并且我并不完全理解它。

我有一个用CBV实现的删除视图 - 我试图传递额外的参数uri     (此参数是从中调用delete的当前URL,这种方式在删除后将执行,用户将返回到他开始的位置。)

这是我的url.py

url(r'^category/delete/(?P<pk>\d+)/(?P<uri>\S+)/$', item.views.CategoryDelete.as_view(),
    name='category_delete',),

这是我的view.py我继承删除视图功能

class CategoryDelete(DeleteView):
    model = Category
    success_url = reverse_lazy(uri)

    def delete(self, uri, request, *args, **kwargs):
        try:
            return super(CategoryDelete, self).delete(
                request, *args, **kwargs
            )
        except models.ProtectedError as e:

            return HttpResponse(json.dumps(escape(e)))

当前代码显然给出了一个错误,即未定义uri。 所以问题是如果我想使用success_url,如何将其他参数传递到View类?还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

尝试设置success_url将不起作用,因为它在加载模块时处理,而不是在处理请求时处理。改为覆盖get_success_url

您可以分别从self.argsself.kwargs的网址中访问位置和关键字参数。

def get_success_url(self):
    return reverse(self.kwargs['uri'])