2015-07-20 255 views
6

我不明白什么是错的?我试图制作一个项目的详细页面,如http://tutorial.djangogirls.org/en/extend_your_application/index.html 上的示例,它在我的项目中不起作用,但在练习中一切都很好。Django NoReverseMatch

错误消息: NoReverseMatch在/

Reverse for 'events.views.event_detail' with arguments '()' and keyword arguments '{u'pk': 3}' not found. 1 pattern(s) tried: ['$event/(?P<pk>[0-9]+)/$'] 

HTML(片段)

<div class="col-xs-6"><a class="btn btn-primary" href="{% url 'events.views.event_detail' pk=event.pk %}">Read more</a></div> 
     </div> 

settings.py

ROOT_URLCONF = 'mysite.urls' 

应用urls.py

from django.conf.urls import include, url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.events_list), 
    url(r'^event/(?P<pk>[0-9]+)/$', views.event_detail), 
] 

应用views.py

from django.shortcuts import render, get_object_or_404 
from django.utils import timezone 
from .models import Event 

def events_list(request): 
    events = Event.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 
    return render(request, 'events/events_list.html', {'events': events}) 

def event_detail(request, pk): 
    event = Event.objects.get(pk=pk) 
    return render(request, 'events/event_detail.html', {'event': event}) 
+0

有你看到[这个问题](https://stackoverflow.com/questions/21240680/django-noreversematch)? –

+0

你能显示你的根URL吗? – karthikr

+0

ROOT_URLCONF ='mysite.urls' –

回答

9

您还没有表现出你的mysite.urls,但是从错误信息看起来你做了什么样这样的:

(r'^events/$', include('events.urls')), 

您需要删除终止$,因为那意味着正则表达式的结尾;之后什么都不能匹配。它应该是:

(r'^events/', include('events.urls')), 

注意,也应该给你的事件网址的名称,以方便参考:

url(r'^$', views.events_list, name='events_list'), 
url(r'^event/(?P<pk>[0-9]+)/$', views.event_detail, name='event_detail'), 

所以,你现在可以做的:

{% url 'event_detail' pk=event.pk %} 
+0

Thanx为您的答案。但在没有mysite.urls我仅具有两个根: '从django.conf.urls导入包括,URL 从django.contrib中导入管理 urlpatterns的= [ URL(R' ^管理员/”,包括( (r'^ $',include(“events.urls”)), ]' –

+0

这正是我所说的。你在包含events.urls的行中有一个终止'$'。 –

+0

非常感谢!是工作!你正确的问题是在mysite.urls'$' –