39

如何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,然后返回“类别”。这里一个条目可以是多个类别的一部分。

4

5 回答 5

65

创建一个MyUpdateView继承自UpdateView并覆盖get_success_url方法的类:

class MyUpdateView(UpdateView):
    def get_success_url(self):
        pass #return the appropriate success url

我也喜欢在继承的类视图中传递模板名称和模型等参数,但不在.as_view()urls.py 中

于 2012-06-14T08:38:23.133 回答
35

有同样的问题。正如 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})
于 2012-10-08T16:54:50.127 回答
8

我找到了一种有用且非常简单的方法。看看这个。

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})

    
于 2020-09-28T19:40:54.433 回答
4

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'),

应该做。

于 2016-05-21T08:44:58.317 回答
0

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

于 2012-06-14T07:27:20.907 回答