NoReverseMatch at /url/
당신의 URLconf에서 제공된 매개변수에 대해 매칭되는 URL을 식별할 수 없을 때 django.urls에 의해 발생한다.
urls.py
urlpatterns = [
url(r'^(\d+)/', post_detail, name='post-detail')
]
다음 urls.py에서 views의 메서드 post_detail에 \d+에 매치되는 인자를 전달해준다.
views.py
def post_detail(request, post_id):
post = Post.objects.get(id=post_id)
context = {
'post': post,
}
return render(request, 'blog/post_detail.html', context)
urls.py에 의해 파싱된 request는 views.py에서 post_detail.html로 렌더링 된다.
post-list.html
<a href="{% url 'post-detail' %}"><h2 class="card-title">[{{ post.id }}] {{ post.title }}</h2></a>
url을 시작으로 views를 거쳐 template으로 request process를 정방향이라고 한다면 template에서 a태그에서 post-detail url에 대한 매개 변수를 전해주는 것은 역방향이라고 할 수 있다.
하지만 post-list.html에서 {% ‘post-detail’ %}는 post-detail이라는 이름의 url에 필요한 인자를 전해주지 않아서 url패턴이 매칭되지 않는다. 따라서 ‘post.id’라는 id값을 전해주어 url에 매치될 수 있도록 해준다
<a href="{% url 'post-detail' post.id %}"><h2 class="card-title">[{{ post.id }}] {{ post.title }}</h2></a>
Comments