首页 > 解决方案 > 如何让 django 将用户重定向到我需要的页面?

问题描述

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

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

/update-orders/18 处的 NoReverseMatch

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

请求方法:POST

请求网址: http: //192.168.0.249 :8000/update-orders/18

Django 版本:3.0.5

异常类型:NoReverseMatch

异常值:

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

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

网址.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'),
]

视图.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)

标签: pythondjango

解决方案


您可以覆盖.get_success_url(..)方法 [Django-doc]从而注入参数:

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

推荐阅读