无法在HttpResponseRedirect中传递参数
在成功处理发布数据后,我已经阅读过,您应该使用HttpResponseRedirect重定向到另一个页面。 我正在构建一个用于学习的URL缩写器,来自views.py的代码如下所示:(不工作)
def makeurl(request):
# get url from form
post_url = request.POST['url']
# shorten the url and have the short code returned
shortened_url = shorten_url(post_url)
return HttpResponseRedirect('create')
def create(request):
return render(request, 'shorturl/create.html',
{'shortened_url': shortened_url})
当我的表单被提交以缩短输入URL时,调用“makeurl”,其中缩短的URL被计算并返回(shortened_utl)。 然后我会调用'create',它将呈现'shortened_url需要向用户显示的页面。
问题是,如果我要使用HttpResponseRedirect,我没有办法将'shortened_url'变量传递给我的'create'视图来呈现。 任何人都可以用这个建议我吗? 林新django,欢呼
至少有三种方法可以使用重定向轻松传递参数:
假设您的“创建”视图采用了一个名为“shortened_url”的参数。 使用方法1的URL将如下所示:
# urls.py
url(r'create/(?P<shortened_url>.)/$', 'create', name='create',)
# views.py
def create(request, shortened_url):
# do whatever
在处理表单文章的视图中,您可以这样做:
from django.core.urlresolvers import reverse
def makeurl(request):
. . .
return HttpResponseRedirect(reverse('create', args=(),
kwargs={'shortened_url': shortened_url}))
如果是方法2,则根本不需要url模式中的named参数,而是可以反转url模式并粘贴querystring参数:
def makeurl(request):
. . .
url = reverse('create')
url += '?shortened_url={}' + shortened_url
return HttpResponseRedirect(url)
如果是方法3,则不需要命名参数或查询字符串值:
def makeurl(request):
. . .
request.session['shortened_url'] = shortened_url
return HttpResponseRedirect(reverse('create'))
def create(request):
shortened_url = request.session.get('shortened_url')
. . .
# delete the session value
try:
del session['shortened_url']
except KeyError:
pass
# do whatever
链接地址: http://www.djcxy.com/p/56559.html
上一篇: cant pass parameter in HttpResponseRedirect
下一篇: How force requests post xml to django's request.FILES but not request.POST?