작성
·
203
1
안녕하세요. url reverse 관련 질문이 있습니다.
1)
instagram/templates/instagram/index.html에서
<a href="{% url "instagram:post_new" %}" class="btn btn-primary"> 새 포스팅 쓰기 </a>
답변 1
1
안녕하세요.
1) 각 장고앱의 urls.py에 app_name 값을 설정하면, 이는 url revserse시에 namespace로서 동작을 합니다.
instagram 앱에서도 urls.py 파일을 열어보시면 app_name = "instagram" 설정이 있을 것입니다. 그래서 instagram/urls.py 의 urlpatterns에 정의된 path에 대해서 url reverse를 하실 때에는 필히 namespace인 instagram: 을 붙여주셔야합니다. // app_name을 지정하셨다면 그 장고앱은 필히 namespace로서 그 값을 지정하셔야며, app_name을 지정하지 않은 앱은 namespace가 없는 것입니다.
2) 템플릿태그를 호출 시에 123이나 "hello"와 같이 리터럴 값을 직접 지정하는 것은 단순히 그 값을 지정하는 것이며, suggested_user 라고 쓰는 것은 현재 템플릿 시에 지정된 context data의 값을 참조하는 것입니다. suggested_user.username은 suggested_user 의 username 속성을 참조하는 것입니다.
그리고 장고 템플릿은 디폴트 설정으로 존재하지 않은 context data에 접근 시에는 오류를 발생시키지 않고, 빈 문자열로서 처리가 됨을 참고하세요.
살펴보시고 추가 질문 주세요. 해결되셨다면 해결됨으로 상태변경 부탁드립니다.
화이팅입니다. ;-)
URL Reverse에서는 path/re_path에 지정된 URL 문자열을 생성해줍니다.
path("client/<int:pk>/", name="client1") 에 매칭되는 {% url "client1" 1234 %} 에서는 /client/1234/ 문자열이 만들어질테구요.
path("<int:pk>/client/", name="client2") 에 매칭되는 {% url "client2" 1234 %} 에서는 /1234/client/ 문자열이 만들어집니다.
{% url "client1" 1234 %} 와 {% url "client2" 1234 %} 는 URL 문자열이 어떻게 조합되는 지 신경쓰지 않아도, path name과 인자만 넘겨주면 되는 거죠. 우리는 어떤 path를 통해서 처리하는 지에 대해서만 신경쓰면 될 뿐, 나머지 URL 문자열 생성은 장고에서 알아서 해주는 거죠.
그러니 path route가 변경이 되어도
이전 => path("client/<int:pk>/", name="client1") 에 대해 {% url "client1" 1234 %}
이후 => path("client/<int:pk>/view/", name="client1") 에 대해 {% url "client1" 1234 %}
URL Reverse 코드는 바뀌지 않죠. :-)
그래서, 장고 내에서 뷰에 대한 URL 문자열을 모두 URL Reverse를 사용토록 하시면, 보다 간결하고 유연하게 URL 처리를 하실 수 있습니다.
감사합니다. 두 번째 질문에서
이런 식으로 전달될 때는 url 주소가 넘겨준 인자/follow로 되는 반면,
공식 문서에서는
If this app’s URLconf is included into the project’s URLconf under a path such as this:
…then, in a template, you can create a link to this view like this:
The template tag will output the string
/clients/client/123/
.이런 식으로 suggested_user.username 자리에 전달해 준 client.id라는 인자가 넘겨준 인자/follow처럼 넘겨준 인자/client 가 아니라 client/넘겨준 인자 로 된다는 점이 차이가 있는 점이 궁금합니다. {% url %} 기능의 어떤 부분(함수, 클래스 등...)이 이렇게 '전달되는 인자가 기입되는 부분을 알아서 찾도록 해주는지' 너무 똑똑해서 신기해서요ㅎㅎ
P.S.미해결 창을 지금 봐서 이전 글들 모두 해결로 변경했습니다 :)