【问题标题】:Django: getting NoReverseMatch at / errorDjango:在/错误处获取 NoReverseMatch
【发布时间】:2015-07-27 06:44:59
【问题描述】:

在 SO 上有很多类似的问题,我经历了大部分,但仍然无法解决我的问题。

我收到以下错误:

使用参数“()”和关键字参数反转“category_view” '{'pk': '动态编程'}' 未找到。尝试了 0 种模式:[] /articles/处的 NoReverseMatch

这是我在 urls.py 文件中的设置:

url(r'^category/(?P<pk>[\w-]+)/$', views.CategoryDetailView.as_view(), name='category_view')

而且,这是我对模型中 get_absolute_url() 的定义;

def get_absolute_url(self):
return reverse('category_view', kwargs={'pk': self.slug})

我收到此错误的调​​用者来自 index.html:

<li><a href="{{ category.get_absolute_url }}">{{ category.name }}</a></li>

我确信我遗漏了一些非常明显的东西,但在过去的几个小时内无法弄清楚。 :(

来自项目 urls.py 的内容:

url(r'^articles/$', include('blog.urls', namespace="blog")),
    url(r'^admin/', include(admin.site.urls)),

【问题讨论】:

  • 你在项目 urls.py 中包含了 urls.py 吗?
  • 是的,它包含在项目的 urls.py 中。用内容更新了我的答案。

标签: python django


【解决方案1】:

我怀疑您忘记将应用程序中的 urls.py 包含到项目的 urls.py 中。

更新:如果您使用了包含的namespace 参数,那么您必须在reverse() 调用中指定此命名空间:

def get_absolute_url(self):
    return reverse('blog:category_view', kwargs={'pk': self.slug})

【讨论】:

  • 用项目 urls.py 中的内容更新了我的问题。
  • 将命名空间添加到reverse() 调用。请参阅我的答案中的更新。
  • 现在,我得到了这个: 'category_view' 的反向参数'()' 和关键字参数'{'pk': 'dynamic-programming'}' 未找到。尝试了 1 种模式:['articles/$category/(?P[\\w-]+)/$']
  • 从包含正则表达式中删除美元符号:url(r'^articles/', include('blog.urls', namespace="blog")),
  • 你运行的是什么版本的 django?虽然@catavaran 的答案是正确的,但它是为 1.8+ 设计的,低于 1.8 的任何东西都需要将 current_app 属性添加到相反的位置。 return reverse('blog:category_view', kwargs={'pk': self.slug}, current_app=self.request.resolver_match.namespace)
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 2021-06-18
  • 2015-10-24
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多