【问题标题】:NoReverseMatch exception in DjangoDjango 中的 NoReverseMatch 异常
【发布时间】:2011-12-14 10:10:42
【问题描述】:

我有这个 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.

您对我如何使它起作用有任何想法吗?

【问题讨论】:

  • 好吧,slug 是一个 kwarg,所以 args 版本不起作用。你能浏览到你试图反转的网址吗? (即你的正则表达式确实有效)
  • 是的 url 有效,但它接缝反向不喜欢 url 中的 optionnal 属性。

标签: django django-urls


【解决方案1】:

如果问题是可选参数,一种解决方法是定义两个 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)”)

【讨论】:

    【解决方案2】:

    这表明 reverse 不喜欢可选参数。

    你应该使用:

    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'),
                       )
    

    然后reverseargskwargs 一起工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-15
      • 2017-05-24
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2017-09-07
      相关资源
      最近更新 更多