【发布时间】:2022-01-27 00:06:10
【问题描述】:
我一辈子都找不到在 Django 中使用该视图的参数重定向到另一个视图的方法。我已经尝试过 django.shortcuts 重定向方法,但这似乎不起作用(它似乎想要为 url 模式而不是视图函数采用模式。HttpResponseRedirect 函数显然不起作用,因为该函数只是重定向到另一个网址。还有哪些其他选项?
【问题讨论】:
我一辈子都找不到在 Django 中使用该视图的参数重定向到另一个视图的方法。我已经尝试过 django.shortcuts 重定向方法,但这似乎不起作用(它似乎想要为 url 模式而不是视图函数采用模式。HttpResponseRedirect 函数显然不起作用,因为该函数只是重定向到另一个网址。还有哪些其他选项?
【问题讨论】:
您似乎想提供使用重定向,并想提供一个很容易做到的参数
x.order_total= total+shipping_total
x.save()
return redirect(f'/order/payment/{order_number}')
这里我只粘贴了我的一个视图的 sn-p,如果你有匹配的 url,你可以在字符串外使用 f 插入参数,它会正常工作
【讨论】:
您可以使用不使用硬编码 url 的 reverse 使用参数重定向到其他视图,而不是使用 internally 的 url 实际上重定向的名称
def view_one(request):
return redirect('view_two', arg=arg)
默认情况下重定向会为永久重定向做临时重定向,你必须指定它才能知道两者之间的区别看看here
【讨论】:
您可以使用反向函数来填充您的 URL 模式 您可以使用以下行导入 reverse 函数:
from django.core.urlresolvers import reverse
如果你有这样的 URL,你可以使用反向:
url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),
path('project/<str:project_id>/', name='edit_project'),
用法:
redirect(reverse('edit_project', kwargs={'project_id':4}))
或:
redirect(reverse('app_name:edit_project', kwargs={'project_id':4}))
文档here
【讨论】: