【问题标题】:How to redirect to the ?next=url instead of the success_url in a generic class based view in django?如何在 django 中基于通用类的视图中重定向到 ?next=url 而不是 success_url?
【发布时间】:2020-09-24 05:24:52
【问题描述】:

我想知道如何在 django 的基于通用类的视图中重定向到 ?next=url 而不是 success_url。

视图

class CategoryUpdateView(UpdateView):
    model = Category
    template_name = "categories/category_edit.html"
    fields = ('name', 'description', 'image')
    success_url = 'category_list'

在模板中

<a href="{% url 'category_edit' category.id %}?next={% url 'another_url' %}">Add</a>

更新类别后,我希望重定向到链接中的 nex 值而不是 success_url。我该怎么做?

谢谢。

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    从字段中删除success_url,然后在类中添加get_success_url方法,例如:

    def get_success_url(self):
        URL = self.request.GET.get('next')
        return URL
    

    【讨论】:

    • 非常好,我最终为视图使用了默认值,以防next未设置,它将正常运行:url = self.request.GET.get('next', self.success_url)
    【解决方案2】:

    这对我有用,感谢您的帮助。 正如 Andrey Borzenko 所说,我必须将这些行添加到视图中并删除 success_url。

       def get_context_data(self, **kwargs):
            context=super(CategoryUpdateView, self).get_context_data(**kwargs)
            next_page = self.request.GET.get('next')
            if next_page:
                context["next"] = next_page
            return context
    
       def get_success_url(self):
            redirect_to = self.request.POST.get('next')
            return redirect_to or reverse('default_redirection')
    

    【讨论】:

      猜你喜欢
      • 2011-11-15
      • 2011-09-10
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2021-07-12
      相关资源
      最近更新 更多