在reverse_lazy django中发送参数 - Python

时间:2016-06-02 06:37:58

标签: python django django-views

我正在使用reverse_lazy,如下所示

def index:
    if firstTimeLogin == 0:

        response = HttpResponseRedirect(reverse_lazy('abc', args={'cid': 0}))
    else:

        response = HttpResponseRedirect(reverse_lazy('abc', args={'cid': 1}))

abc view

def abc(request, userid = None, cid =1 ):
    return HttpResponse(cid)

urls.py

url(r'^abc/$', views.abc, name='abc'),
url(r'^abc/(?P<userid>.*)/$', views.abc, name='abc'),
url(r'^abc/(?P<cid>.*)/$', views.abc, name='abc'),

现在当我通过reverse_lazy重定向到def abc时,我得到的网址如下: baseurl/appname/abc/cid,在这里我不知道如何获取cid的值。

如果需要其他方法,请更正。我只需要将一些参数传递给reverse_lazy,我想在def abc

中获取

更新

参考罗马人所说的话: 我更新了: urls.py as:

url(r'^abc/(?P<cid>.*)/$', views.abc, name='abcfirst')

重定向为:

response = HttpResponseRedirect(reverse_lazy('abcfirst', args={'cid': 1}))

我仍然无法通过reverse_lazy访问我发送的参数。

2 个答案:

答案 0 :(得分:2)

您有两个名称相同的网址,并且使用相同的参数(相同的正则表达式)。

你不能将这两者结合起来让视图同时兼顾,这不是django的工作原理。

你要么

  • 制作一个包含两个参数的网址
  • 制作单独的观点

但不管怎样,你不能为不同的网址使用相同的名称。

答案 1 :(得分:0)

args功能:

的参数中将kwargs替换为reverse_lazy
response = HttpResponseRedirect(reverse_lazy('abcfirst', kwargs={'cid': 1}))