UpdateView中的success_url,基于传递的值

时间:2012-06-14 06:44:27

标签: django django-class-based-views

如何根据参数设置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然后返回'类别'。这里的条目可以是多个类别的一部分。

5 个答案:

答案 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)

为什么不在表单(模板)中添加“下一个”参数并在视图中捕获它。通常以这种方式实现重定向。