我有一个链接到网址的链接,如下所示:
<a href="{% url 'sign_in' %}" title="Click here to sign in">Sign in</a>
这链接到Django中的新视图,我的URL模式如下所示:
url(r'^sign-in/', sign_in, name="sign_in")
在我的sign_in
视图中,我希望能够访问用户最初点击该链接的网址。具体来说,我想将此URL添加一个名为returnUrl
的参数到新URL。然后,我的sign_in
视图可以重定向到此新网址,相应的视图可以访问returnUrl
参数。
例如:
sign_in
视图重定向到sign_in_page
,将步骤1中的网址添加为参数。sign_in_page
可以访问网址参数。如何在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参数的唯一方法 - 这对我的实现很重要。如果你知道如何在没有重定向的情况下做到这一点 - 请告诉我!
答案 0 :(得分:2)
如果要在视图之间传递数据,可以使用POST数据或GET。在您的情况下,GET数据就是您想要的。 所以你应该使用以下网址。
"{% url 'sign_in' %}?returnUrl={{request.path}}"
然后在你看来:
在以下示例中,我使用从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...
)
答案 1 :(得分:1)
referer = self.request.META.get('HTTP_REFERER')
在您需要获取上一个网址的视图中尝试此操作,希望这是您正在寻找的内容
答案 2 :(得分:0)
如果您想重定向到referer,那么您可以尝试这样
from django.http import HttpResponseRedirect
def sign_in(request):
# Do your logic here
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))