在Django中传递参数到URL,但不希望其显示在URL中
我想在使用django的reverse函数生成URL时,传递一些额外的选项,但我不想在URL中显示这些参数。
我试过下面的代码,但没有成功,抛出了NoReverseMatch异常。
urls.py
urlpatterns = patterns('',
url(r'^foo-direct/', 'myapp.views.someview', {'wo_id': 1}, name='foo-direct'),
)
views.py
return HttpResponseRedirect(reverse('foo-direct', kwargs={'wo_id':2}))
请告诉我我是否做错了什么。
更新
我该如何在浏览器(URL)中不显示参数的情况下实现这个功能呢?
我的视图函数接受多个参数,我想传递这些参数,所以我不想在URL中显示所有的参数。
2 个回答
-1
这真是说不通。没有办法把动态参数传递给视图而不通过网址。那它是怎么到那里的呢?当用户真的访问那个网址时,Django又怎么知道用哪个参数呢?
0
只需从你的反向函数中去掉kwargs参数就可以了。
return HttpResponseRedirect(reverse('foo-direct')
更新
如果你想用动态的wo_id
,就必须把wo_id
放在网址里。反向函数会查看你所有的网址配置,寻找一个与传给reverse
的args
、kwargs
和name
匹配的网址。当它找到匹配项时,就会返回对应的函数(也就是视图)。
我不太清楚你为什么不想在网址中包含wo_id
,所以很难给出建议。不过,如果你想让网址更有描述性,也许可以考虑用一个“slug”字段来代替id。