如何在django中重定向变量?

时间:2014-12-06 10:12:49

标签: python django redirect

如何在django中重定向变量? 请指导我,谢谢。

urls.py

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^computer/$', views.computer, name='computer'),
    url(r'^result/$', views.result, name='result'),
)

这是我原来的views.py:

def computer(request):
    result =  Computer.objects.order_by('?')[:1]
    return render(request, 'many/result.html',{'result':result})  

我发现我有问题,渲染不会重定向到网址上的moneymany/result.html
因此,如果用户刷新,它将在同一页面上获得另一个结果。

所以我必须使用重定向到many/result.html 在django中重定向的常用方法是什么,我必须传递变量result? 我试试这个,但不行:

def result(request):
    return render(request, 'many/result.html')

def computer(request):
    result =  Computer.objects.order_by('?')[:1]     
    url = reverse(('many:result'), kwargs={ 'result': result })
    return HttpResponseRedirect(url)

3 个答案:

答案 0 :(得分:4)

如何使用重定向。

from django.shortcuts import redirect

def computer(request):
    result =  Computer.objects.order_by('?')[:1]
    return redirect('view-name-you-want', { 'result'=result })

答案 1 :(得分:2)

你需要

url(r'^result/(?P<result>[^\/]*)/$', views.result, name='result'),

return redirect(reverse('many:result', kwargs={ 'result': result }))

或(不更改网址)

return redirect('/result/?p=%s' % result )

如果你想在重定向时保持POST数据,那就意味着你的设计不好。引用卢卡斯:

  

如果你遇到这样的问题,你的可能性很小   过度复杂的设计。这是对POST的HTTP的限制   数据不能与重定向一起使用。

答案 2 :(得分:0)

这与我合作,只需要传递url参数作为参数

return redirect('pagename' ,param1 , param2)

我的网址看起来像:

path('page', views.somefunction, name="pagename")

注意:在我的情况下,某些功能仅接受POST参数