Django NoReverseMatch

I do not understand what happened? I tried to make a page with detailed information about one element, for example, in http://tutorial.djangogirls.org/en/extend_your_application/index.html and this does not work in my project, but everything was fine in the exercises.

Error message: NoReverseMatch in /

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 (snippet)

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

app 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), ] 

app 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}) 
+6
source share
1 answer

You did not specify your mysite.urls, but from the error message, it looks like you did something like this:

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

You need to drop the trailing $, as this means the end of the regular expression; after that nothing can compare. It should be:

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

Please note that you must also provide the names of your URLs to make them easier to use:

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

so now you can:

 {% url 'event_detail' pk=event.pk %} 
+9
source

All Articles