2011-12-14 14 views
0

我有了这个urls.py:当我用反向NoReverseMatch例外

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. 

你有什么想法可以使它成功吗?

+0

以及`slug`是kwarg所以`args`版本将无法正常工作。你能浏览到你想要反转的网址吗? (即你的正则表达式确实工作) – second 2011-12-14 10:19:34

+0

是的网址工作,但它接缝反向不喜欢URL中的optionnal属性。 – Natim 2011-12-14 10:32:46

回答

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)”)

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