如何使django将用户重定向到我需要的页面?

如何使django将用户重定向到我需要的页面?

我有一个网络应用程序。 例如,用户在一个页面上,其地址为local:8000 / detail-order / 18。 此页面是订单18的详细信息。 此页面上的链接可编辑此订单。 当用户单击此链接时,将显示一个订单编辑表单。 当用户使用此表单编写并单击“提交”按钮时,将出现错误。 我想让一个用户回到本地:8000 / detail-order / 18。

NoReverseMatch位于/ update-orders / 18

反向查找“ detail_order”,未找到任何参数。尝试了1个模式:['detail \ -order /(?P [0-9] +)$']

请求方法:POST

Request URL: http://192.168.0.249:8000/update-orders/18

Django版本:3.0.5

异常类型:NoReverseMatch

异常值:

反向查找“ detail_order”,未找到任何参数。尝试了1个模式:['detail \ -order /(?P [0-9] +)$']

异常位置:_reverse_with_prefix的第677行中的/root/.local/share/virtualenvs/myp4-4l8n6HJk/lib/python3.7/site-packages/django/urls/resolvers.py

urls.py

from django.contrib import admin
from django.urls import path, include
from .views import *
from print import views

urlpatterns = [
    path('', views.home_page, name='index'),
    path('orders', views.OrderCreateView.as_view(), name='orders'),
    path('update-orders/<int:pk>', views.UpdateOrderView.as_view(), name='update_order'),
    path('delete-orders/<int:pk>', views.DeleteOrderView.as_view(), name='delete_order'),
    path('detail-order/<int:pk>', views.DetailOrderView.as_view(), name='detail_order'),
]

views.py

class UpdateOrderView(CustomSuccessMessageMixin, UpdateView):
    model = Order
    template_name = 'orders.html'
    form_class = OrderForm
    success_url = reverse_lazy('detail_order')# HERE
    success_msg = 'Изменения сохранены'
    def get_context_data(self, **kwargs):
        kwargs['update'] = True
        return super().get_context_data(**kwargs)
评论
  • m,嗨起
    m,嗨起 回复

    You can override the .get_success_url(..) method [Django-doc] and thus inject parameters:

    from django.urls import reverse
    
    class UpdateOrderView(CustomSuccessMessageMixin, UpdateView):
        model = Order
        template_name = 'orders.html'
        form_class = OrderForm
        success_msg = 'Изменения сохранены'
    
        def get_context_data(self, **kwargs):
            kwargs['update'] = True
            return super().get_context_data(**kwargs)
    
        def get_success_url(self):
            return reverse('detail_order', kwargs={'pk': self.object.pk})