2015-07-20 257 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'$' –