0

简而言之,我正在尝试在我的一个视图函数中测试从 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')

我已经搜索了将近两个小时,试图资助一种简洁的方式来做到这一点。

任何帮助,将不胜感激!

4

2 回答 2

1

工作解决方案 在@Code-Apprentice 的指导下,这实际上非常简单

一对夫妇首先进口

from django.urls.resolvers import NoReverseMatch
from django.urls import reverse

然后获取 ref 参数并验证是作为一个合法的视图名称,我做了以下

# get ref parameter
ref = request.GET.get('ref', None)

if ref:
    try:
        # redirect to ref view name if valid
        return redirect(reverse(ref))
    except NoReverseMatch as e:
        print('No reverse match found')

# redirect to specific view if ref is invalid
return redirect('users')
于 2022-01-24T22:48:46.720 回答
1

问题是您正在传递一个resolve()需要 URL 路径的视图名称。为了防止 404,您需要首先reverse()查看视图名称以获取路径。然后您可以使用该路径resolve()来检查该路径是否存在。

于 2022-01-24T22:09:36.050 回答