6

I can't understand what's wrong? I tried to make a detail page of one item, like in example on http://tutorial.djangogirls.org/en/extend_your_application/index.html and It doesn't work in my project, but In exercises everything was good.

Error message: NoReverseMatch at /

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

<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})
Andrey Nadosha
  • 262
  • 1
  • 4
  • 16

1 Answers1

9

You haven't shown your mysite.urls, but from the error message it looks like you have done something like this:

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

You need to drop the terminating $, since that means the end of the regex; nothing can match after that. It should be:

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

Note that you should also give your event URLs names, to make it easier to reference:

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

so that you can now do:

{% url 'event_detail' pk=event.pk %}
Daniel Roseman
  • 588,541
  • 66
  • 880
  • 895
  • Thanx for your answer. but in mysite.urls nothing i have only two root: 'from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^$', include("events.urls")), ]' – Andrey Nadosha Jul 20 '15 at 19:00
  • Which is exactly what I said. You have a terminating `$` in the line that includes events.urls. – Daniel Roseman Jul 20 '15 at 19:00
  • Thank you a lot! It's work! You right problem was in mysite.urls with '$' – Andrey Nadosha Jul 20 '15 at 19:06