Исключение NoReverseMatch в Django - PullRequest
       277

Исключение NoReverseMatch в Django

0 голосов
/ 14 декабря 2011

У меня есть этот 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 ]

2 голосов
/ 14 декабря 2011

, если проблема является необязательным аргументом, в качестве альтернативы можно определить две записи 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 голосов
/ 14 декабря 2011

Похоже, что обратному не нравятся необязательные аргументы.

Вы должны использовать:

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 работает с args и kwargs

...