在Django中传递参数到URL,但不希望其显示在URL中

2 投票
2 回答
2343 浏览
提问于 2025-04-17 17:50

我想在使用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放在网址里。反向函数会查看你所有的网址配置,寻找一个与传给reverseargskwargsname匹配的网址。当它找到匹配项时,就会返回对应的函数(也就是视图)。

我不太清楚你为什么不想在网址中包含wo_id,所以很难给出建议。不过,如果你想让网址更有描述性,也许可以考虑用一个“slug”字段来代替id。

撰写回答