gpt4 book ai didi

python - Django:在 URL 模板标签中保留 GET 参数

转载 作者:行者123 更新时间:2023-12-04 08:25:14 26 4
gpt4 key购买 nike

我在我的 Django 应用程序中使用了一个 GET 参数来传递信息,我希望在将来使用 Django 的 {% url %} 的链接中保留这些信息。模板标签。
就我而言,这是为了允许在应用程序内进行仅查看访问。
示例网址:https://my.app/entry/123?key=abcdef该页面上的示例链接已创建如下:<a href="{% url 'entry_detail' entry.id %}">View more details</a> 预期结果:
我希望 Django 的 URL 模板标签自动保留任何名为 key 的 GET 参数。整个应用程序。在这种情况下,它将生成应用相同参数的新 URL。例如:https://my.app/entry/123/details?key=abcdef 解决方法
This blog postthis gist通过创建一个新的模板标签并使用它代替 Django 的 url 来解决这个问题。模板标签。
这真的是最好的解决方案吗?我最终不得不替换 {% url %} 的每个实例在我的应用程序中使用我自己的标签。它也不会修复 reverse() 的使用.

最佳答案

Django 中间件可以满足您的需求。您可以检查您何时收到关键参数并存储在session ,然后如果 url 中没有关键参数,则附加它:

class DetectKeyParameter:
def __init__(self, get_response):
self.get_response = get_response


@staticmethod
def process_view(request, view_func, view_args, view_kwargs):
return view_func(request, *view_args, **view_kwargs)


def __call__(self, request):
if 'key' in request.GET:
#If alerady is on the url just store it on session
request.session['key'] = request.GET.get('key')
else:
if 'key' in request.session:
if not request.GET._mutable:
#You need to change this property to add parameters to GET
request.GET._mutable = True

# now you can edit it
request.GET['key'] = request.session['key']
request.GET._mutable = False

response = self.get_response(request)
return response
这样,您将在每个请求上都有 key 参数,直到您删除 session 变量。也许代码不能 100% 工作,但我希望你能明白。

关于python - Django:在 URL 模板标签中保留 GET 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65299000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com