如何根据参数设置success_url
?
我真的想回到我来自的地方,而不是一些静态的地方。在伪代码中:
url(r'^entry/(?P<pk>\d+)/edit/(?P<category>\d+)',
UpdateView.as_view(model=Entry,
template_name='generic_form_popup.html',
success_url='/category/%(category)')),
这意味着:编辑条目pk
然后返回'类别'。这里的条目可以是多个类别的一部分。
答案 0 :(得分:50)
创建一个继承自MyUpdateView
并覆盖UpdateView
方法的课程get_success_url
:
class MyUpdateView(UpdateView):
def get_success_url(self):
pass #return the appropriate success url
此外,我想在继承的类视图中传递template_name和model之类的参数,但不能在urls.py中的.as_view()
中传递
答案 1 :(得分:22)
有同样的问题。能够从Dima提到的self.kwargs中获取参数:
def get_success_url(self):
if 'slug' in self.kwargs:
slug = self.kwargs['slug']
else:
slug = 'demo'
return reverse('app_upload', kwargs={'pk': self._id, 'slug': slug})
答案 2 :(得分:2)
在模型上定义get_absolute_url(self)
。实施例
class Poll(models.Model):
question = models.CharField(max_length=100)
slug = models.SlugField(max_length=50)
# etc ...
def get_absolute_url(self):
return reverse('poll', args=[self.slug])
如果您的PollUpdateView(UpdateView)
将该模型的实例加载为object
,则默认会查找get_absolute_url()
方法,以确定在POST
之后重定向到的位置。然后
url(r'^polls/(?P<slug>\w+)/, UpdateView.as_view(
model=Poll, template_name='generic_form_popup.html'),
应该这样做。
答案 3 :(得分:1)
我发现了一种有用且非常简单的方法。看看。
class EmployerUpdateView(UpdateView):
model = Employer
#other stuff.... to be specified
def get_success_url(self):
pk = self.kwargs["pk"]
return reverse("view-employer", kwargs={"pk": pk})
答案 4 :(得分:0)
为什么不在表单(模板)中添加“下一个”参数并在视图中捕获它。通常以这种方式实现重定向。