带args的URL不会反转

时间:2013-10-16 07:37:29

标签: django

我有以下网址:

urlpatterns += patterns('app_common.views_settings',
    url(r'([\w-]+)/(\d+)/settings/$', 'settings', name="configuration_homepage"),
    url(r'(?P<short_name>[\w-]+)/(?P<product_id>\d+)/settings/modify/(?P<sim_id>\d+)/$', 'modify_sim', name="modify_sim"),
)

urlpatterns += patterns('app_common.views_operator',
    url(r'^operator/$', 'choose_operator', name="choose_operator"),
    url(r'^(?P<short_name>[\w-]+)/project/$', 'choose_project', name="choose_project"),
    url(r'([\w-]+)/(\d+)/$', 'set_product', name="set_product"),
    url(r'^(?P<short_name>[\w-]+)/$', 'set_operator', name="set_operator"),
)

我尝试使用以下方法撤消配置主页:

url = reverse('configuration_homepage', kwargs={short_name, product_id})
return HttpResponseRedirect(url)

有时可行,但有时会因此问题失败(short_name = OCI和product_id = 1)

Exception Type: NoReverseMatch
Exception Value:    Reverse for 'configuration_homepage' with arguments '(u'1', u'OCI')' and keyword arguments '{}' not found.

如果你们在我的代码中发现错误,可以随意告诉我......我试图给变量命名,但在这种情况下找不到网址。

2 个答案:

答案 0 :(得分:1)

您的kwargs错误,您传递的是set()而不是dict()

你(可能)想要的是:

url = reverse('configuration_homepage',
              kwargs={short_name: short_name, product_id: product_id})

这是我希望dict(a=1, b=2)超过{a:1, b:2}的众多原因之一,

答案 1 :(得分:1)

使用args代替kwargs

url = reverse('configuration_homepage', args=[short_name, product_id])