링크
이 페이지의 내용 정리 위캔입니다.
URL 하드코딩
<li><a href="/pybo/{{ question.id }}/">{{ question.subject }}</a></li>
- URL 매핑에 name 속성을 부여해야한다.
- 경로 :
...pybo/urls.py
urlpatterns = [
# 수정
path('', views.index, name='index'),
# 수정
path('<int:question_id>/', views.detail, name='detail'),
]
http://localhost:8000/pybo/
URL은 index, http://localhost:8000/pybo/2
와 같은 URL에는 detail이라는 이름을 부여했다.
템플릿에서 URL 별칭 사용하기
- 경로 :
...templates\pybo\question_list.html
...
{% for question in question_list %}
#수정
<li><a href="{% url 'detail' question.id %}">{{ question.subject }}</a></li>
...
- 하드코딩 되어있던
/pybo/{{ question.id }}
링크가 %url 'detail' question.id %
로 변경되었다.
question.id
는 URL 매핑에 정의된 <int:question_id>
에 전달해야 하는 값을 의미한다.
URL 네임스페이스
- 이후 다른 앱에서도 동일한 URL 별칭을 사용할 수 있으므로
...pybo/urls.py
파일에 네임스페이스를 의미하는 app_name
변수를 지정한다.
- 경로 :
mysite\pybo\urls.py
from . views
app_name = 'pybo'
...
- 위와 같이 수정하고 페이지를 요청하면 오류가 발생한다.
- 오류를 해결하려면 템플릿에서 사용한 URL 별칭에 네임스페이스를 지정해야 한다.
- 경로 :
...templates\pybo\question_list.html
# 수정
<li><a href="{% url 'pybo:detail' question.id %}">{{ question.subject }}</a></li>
{% url 'detail' question.id %}
-> {% url 'pybo:detail' question.id %}
- detail 앞에 pybo라는 네임스페이스를 붙여줬다.