Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Django Basics Final Details Article detail view

Daniel Goodkin
PLUS
Daniel Goodkin
Courses Plus Student 9,846 Points

I am doing the article detail view challenge. What's wrong with: url(r'article/(?P<pk>\d+)/$', views.article_view)

The above url does not work and I cannot see why

articles/views.py
from django.shortcuts import render

from .models import Article, Writer


def article_list(request):
    articles = Article.objects.all()
    return render(request, 'articles/article_list.html', {'articles': articles})


def writer_detail(request, pk):
    writer = Writer.objects.get(pk=pk)
    return render(request, 'articles/writer_detail.html', {'writer': writer})

def article_detail(request, pk):
    article = Article.objects.get(pk=pk)
    return render(request, 'articles/article_detail.html', { 'article': article} )
articles/urls.py
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'writer/(?P<pk>\d+)/$', views.writer_detail),
    url(r'', views.article_list),
    url(r'article/(?P<pk>\d+)/$', views.article_detail)
]

2 Answers

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,441 Points

The last URL has no constraints and will match anything. So your URL must come before the article_list url.:

urlpatterns = [
    url(r'article/(?P<pk>\d+)/$', views.article_detail),
    url(r'writer/(?P<pk>\d+)/$', views.writer_detail),
    url(r'', views.article_list),
]

Kenneth Love: should the last url pattern be url(r'^$', views.article_list)?

Daniel Goodkin
Daniel Goodkin
Courses Plus Student 9,846 Points

Many thanks Chris. I remember now that Kenneth did flag that in the associated video.

Kenneth Love
Kenneth Love
Treehouse Guest Teacher

You want the URLs to become more permissive as they go. Ironically, ^$ is very restrictive (it only matches a completely empty string). Still, though, that's generally what you want at the end of your list.

This worked too

urlpatterns = [
    url(r'writer/(?P<pk>\d+)/$', views.writer_detail),
    url(r'article/(?P<pk>\d+)/$', views.article_detail),
    url(r'', views.article_list), # possible leaving it blank would be the same as  url(r'^$', views.article_list),
]