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 trialDaniel Goodkin
Courses Plus Student 9,846 PointsI 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
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} )
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
Treehouse Moderator 68,441 PointsThe 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)
?
Andreas cormack
Python Web Development Techdegree Graduate 33,011 PointsThis 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),
]
Daniel Goodkin
Courses Plus Student 9,846 PointsDaniel Goodkin
Courses Plus Student 9,846 PointsMany thanks Chris. I remember now that Kenneth did flag that in the associated video.
Kenneth Love
Treehouse Guest TeacherKenneth Love
Treehouse Guest TeacherYou 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.