2011-12-14 56 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