首先,我承认我在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类?还是有更好的方法?
答案 0 :(得分:1)
尝试设置success_url
将不起作用,因为它在加载模块时处理,而不是在处理请求时处理。改为覆盖get_success_url
。
您可以分别从self.args
和self.kwargs
的网址中访问位置和关键字参数。
def get_success_url(self):
return reverse(self.kwargs['uri'])