gpt4 book ai didi

Python/Django - 如何在导航到新 View 之前获取页面 URL

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:53 24 4
gpt4 key购买 nike

我有一个链接到 url 的链接,如下所示:

<a href="{% url 'sign_in' %}" title="Click here to sign in">Sign in</a>

这链接到 Django 中的新 View ,我的 URL 模式如下所示:

url(r'^sign-in/', sign_in, name="sign_in")

在我的 sign_in View ,我想访问用户最初单击链接的 URL。具体来说,我想添加此 URL 有一个名为 returnUrl 的参数到一个新的 URL。我的sign_in然后 View 可以重定向到这个新的 URL,相应的 View 将可以访问 returnUrl。参数。

例如:

  1. 用户点击“登录”
  2. 网站导航到 example.com/sign-in/
  3. sign_in View 重定向到 sign_in_page添加第 1 步中的 URL 作为参数。
  4. sign_in_page有权访问 URL 参数。

我如何在 Django 中实现这一点?我的观点是这样的……

from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.core.urlresolvers import resolve


def sign_in(request):
# I need the original URL the user came from here
# to add it as `returnUrl` below:
return HttpResponseRedirect(reverse('sign_in_page') + '?returnUrl=example.com/whatever')


def sign_in_page(request):
return render(request, 'sign-in.html')

如果我使用重定向走错了路,请告诉我。对我来说,这似乎是添加 URL 参数的唯一方法——这对我的实现很重要。如果您知道无需重定向的方法 - 请告诉我!

最佳答案

如果要在 View 之间传递数据,可以使用 POST 数据或 GET。在您的情况下,获取数据就是您想要的。所以您应该使用以下 URL。

"{% url 'sign_in' %}?returnUrl={{request.path}}"

然后在你看来:

  1. 检查是否发送了 GET 变量 'returnUrl'
  2. 重定向到下一个 URL
  3. 否则重定向到默认页面

在下面的示例中,我使用了继承自 FormView 的基于类的 View

def get_success_url(self):
if self.request.GET.get('next', ''):
return (self.request.GET.get('next', ''))
return reverse_lazy('experiment_list')

注意:确保在设置中包含以下内容,以确保在每个模板中获得 request.path 变量:

## example: settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
# other items...
'django.core.context_processors.request',
# other items...
)

关于Python/Django - 如何在导航到新 View 之前获取页面 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44151339/

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