{% url %} 리버스 관련 질문이 2개 있습니다.
247
작성한 질문수 18
안녕하세요. 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에 접근 시에는 오류를 발생시키지 않고, 빈 문자열로서 처리가 됨을 참고하세요.
살펴보시고 추가 질문 주세요. 해결되셨다면 해결됨으로 상태변경 부탁드립니다.
화이팅입니다. ;-)
0
감사합니다. 두 번째 질문에서
이런 식으로 전달될 때는 url 주소가 넘겨준 인자/follow로 되는 반면,
공식 문서에서는
path('client/<int:id>/', app_views.client, name='app-views-client')
If this app’s URLconf is included into the project’s URLconf under a path such as this:
path('clients/', include('project_name.app_name.urls'))
…then, in a template, you can create a link to this view like this:
{% url 'app-views-client' client.id %}
The template tag will output the string /clients/client/123/.
이런 식으로 suggested_user.username 자리에 전달해 준 client.id라는 인자가 넘겨준 인자/follow처럼 넘겨준 인자/client 가 아니라 client/넘겨준 인자 로 된다는 점이 차이가 있는 점이 궁금합니다. {% url %} 기능의 어떤 부분(함수, 클래스 등...)이 이렇게 '전달되는 인자가 기입되는 부분을 알아서 찾도록 해주는지' 너무 똑똑해서 신기해서요ㅎㅎ
P.S.미해결 창을 지금 봐서 이전 글들 모두 해결로 변경했습니다 :)
0
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 처리를 하실 수 있습니다.
안녕하세요.
0
62
1
[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?
0
285
1
useEffect 훅에서 else 유무에 따른 결과
0
222
1
useAxios 훅의 dependency array 설정
0
254
1
useEffect에서 변수 업데이트 관련 질문
0
389
1
rest_framework.generics.CreateAPIView의 model 속성 유무
0
276
1
bootstrap4
0
481
4
리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요
1
374
1
admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법
0
578
3
useState는 필수일까요?
0
272
1
python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.
0
611
4
Django allauth를 사용한 소셜 로그인 시 에러
0
660
1
프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러
0
569
2
useLocalStorage() 함수 사용여부
0
238
1
django에 LOGIN_URL = '/accounts/login/'의 의미?
0
454
1
리듀서의 의미 재확인
0
439
1
simple-jwt Refresh Token 사용 노하우
0
907
2
docker compose 를 통한 배포 관련 오류 문의
0
686
1
파이썬 속도 장고 관련 궁금한게 있습니다.
0
372
1
is_like_user
0
238
1
related_name 오류
0
278
1
re_path 오류
0
265
1
re_path url
0
255
1
No post matches the given query
0
671
2





