【发布时间】:2022-01-24 22:03:09
【问题描述】:
简单地说,我正在尝试在我的一个视图函数中测试从 URL 参数捕获的视图名称,以查看它是否有效。如果没有,则重定向到另一个页面。
比如取这个url...
www.site.com/users/?ref=view_name
那么在我看来
ref = request.GET.get('ref', None)
return redirect(ref) if ref else redirect('users')
当然,问题是,如果用户更改了 ref 参数,它将返回 404。我希望能够测试 ref=home 是否是有效视图并返回它,如果不是则重定向到另一个视图。
我一直在搞乱 Django 的解析和反转,但我没有得到我想要的结果。
我还尝试以各种方式将 try/finally 与 resolve 和 reverse 混合使用。是的,笨...我知道。
try:
if ref:
return redirect(resolve(ref))
finally:
return redirect('user')
我已经搜索了将近两个小时,试图资助一个简洁的方法来做到这一点。
任何帮助将不胜感激!
【问题讨论】:
-
不接受“视图名称”,为什么不接受实际的 URL?当然,它需要进行 URL 编码,但这很常见,例如在登录流程中确定成功身份验证后重定向的位置。
-
如果你坚持在这里使用视图名称,那么
reverse()是正确使用的函数,而不是resolve()。 -
@Code-Apprentice 我的想法是使用视图名称,因为任何 url 更改都不会影响现有代码。
-
请在下面的部分中发布您的解决方案以获得答案,而不是作为您问题的一部分。
标签: python django django-views django-urls django-url-reverse