Py学习  »  Django

[精华] django1.8 出现NoReverseMatch异常

mugbya • 8 年前 • 4159 次点击  
环境: python 3.4.3  django-1.8.2

在展示详细内容时出现这个异常:

NoReverseMatch at /
Reverse for 'detail' with arguments '()' and keyword arguments '{'pk_id': 2}' not found. 1 pattern(s) tried: ['$qs/(?P<pk_id>[0-9]+)/$']

其中有关的文件如下:

index.html

{% for item in post_latest %}
   <h1 class="title transition"><a href="{% url 'detail'  pk_id=item.pk %}">{{item.brief}}</a></h1>
{% endfor %}

urls.py

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),

    url(r'^qs/(?P<pk_id>[0-9]+)/$', views.detail, name='detail'),

]

views.py

def detail(request, pk_id):
    detail_qs = get_object_or_404(Qs, pk=pk_id)
    return render(request, 'qs/node/detail.html', {'detail': detail_qs})

当把index.html中的内容改成如下时,则没有这个异常

<h1 class="title transition"><a href="qs/{{item.id}}/">{{item.brief}}</a></h1>

但是按照django的规范中,还是最开始的写法符合,但是却一直报异常,google未果,所以求帮助

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1112
 
4159 次点击  
文章 [ 4 ]  |  最新文章 8 年前
mugbya
Reply   •   1 楼
mugbya    8 年前

主要是在入口urls配置错误

我之前在引入app的url是这样写的:

urlpatterns = [
    url(r'^$', include('qs.urls')),
    url(r'^admin/', include(admin.site.urls)),
]

看e配置知道,知道只处理了admin/ 跟 根路径,而根路径下由于$结束,中断了app(qs)的urls配置,以致r'^qs/(?P<pk_id>[0-9]+)/$不能被匹配到。所以修改入口urls配置,修改如下:

urlpatterns = [
    # 别多加$
    url(r'^', include('qs.urls')),
    url(r'^admin/', include(admin.site.urls)),
]
cundi-weibo
Reply   •   2 楼
cundi-weibo    8 年前

@mugbya 可以把改正过的视图文件贴出来并说明理由,以方便后来遇到同样问题的人

mugbya
Reply   •   3 楼
mugbya    8 年前

这样不行的... 不过解决了

segmentfault

cundi-weibo
Reply   •   4 楼
cundi-weibo    8 年前

@mugbya

{% url 'detail'  pk_id=item.pk %}

去掉 pkd_id,写成

   {% url 'url命名空间:url名称'  item.pk %}