작성
·
210
답변 3
1
안녕하세요.
url reverse 시에 콜론(:) 앞에 입력하는 이름을 앱의 namespace라고 하며, 이를 사용하기 위해서는
그 앱의 urls.py 내에 app_name 설정을 하셔야 합니다.
accounts/urls.py 내에 app_name 설정을 하지 않으시면 {% "profile" %} 로 쓰셔야 하며,
accounts/urls.py 내에 app_name = "accounts" 설정을 하셨다면, 필히 {% url "accounts:profile" %} 로만 쓰셔야 합니다.
0
안녕하세요.
장고의 URL Reverse는 직접적으로 view 함수를 찾는 것이 아니라, urlpatterns에 등록된 path를 찾습니다.
accounts/urls.py 이 다음과 같이 되어있을 때,
urlpatterns = [
path("profile/", views.profile, name="profile"),
]
{% url "profile" %} 과 같이 쓰시면 등록된 path 중에 name이 "profile"인 것을 찾아서, 역으로 url 문자열을 계산해내는 것입니다.
현재 프로젝트에 등록된 모든 urlpatterns 목록을 확인코자하신다면 django-extensions 라이브러리에서 제공되는 show_urls 명령을 써보세요.
https://django-extensions.readthedocs.io/en/latest/command_extensions.html?highlight=show_urls#command-extensions
그리고 urlpatterns에는 모든 앱들의 path들이 list로 하나로 합쳐서 등록이 되어있구요. url reverse 시에 리스트에 등록된 첫 path부터 순차적으로 부합여부를 체킹하게 됩니다.
0
답변 감사합니다 선생님!
다만 제 질문은 {% url "profile" %}만으로 장고에서 어떻게 accounts/profile url로 인식하는지가 궁급했습니다.
Instagram에 profile링크가 있다면 instagram/profile url과 충돌이 일어나지 않을까 해서 여쭙니다.