Django中的NoReverseMatch异常

时间:2011-12-14 10:10:42

标签: django django-urls

我有这个urls.py:

urlpatterns = patterns('',

                   # Plugin actions
                   url(r'plugin/((?P<slug>[a-zA-Z0-9_\-]*)/)?$', PluginView.as_view(), name='wa-plugin'),
                   )

然后当我使用反向时:

reverse('wa-plugin', args=[u'plugin-header-1'])

甚至

reverse('wa-plugin', kwargs={'slug':u'plugin-header-1'})

我得到了

NoReverseMatch: Reverse for 'wa-plugin' with arguments 
'('plugin-header-1',)' and keyword arguments '{}' not found.

您对我如何使其有效有任何想法吗?

2 个答案:

答案 0 :(得分:2)

如果问题是可选参数,那么一种方法是定义两个url条目(到同一个视图):

urlpatterns = patterns('',
    # Plugin actions
    url(r'plugin/$', PluginView.as_view(), name='wa-plugin'),
    url(r'plugin/(?P<slug>[a-zA-Z0-9_\-]*)/$', PluginView.as_view(), name='wa-plugin'),
)

(很确定你甚至可以使用相同的名字,因为它们有不同的“签名(kwargs)”)

答案 1 :(得分:0)

它的接缝反转不像可选参数。

您应该使用:

urlpatterns = patterns('',

                   # Plugin actions
                   url(r'plugin/$', PluginView.as_view(), name='wa-plugin'),
                   url(r'plugin/(?P<slug>[a-zA-Z0-9_\-]*)/$', PluginView.as_view(), name='wa-plugin-slug'),
                   )

然后reverse适用于argskwargs