인프런 커뮤니티 질문&답변

정중한 앵무새님의 프로필 이미지
정중한 앵무새

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

템플릿 레이아웃에 링크 추가하기

url reverse 설계

작성

·

210

0

강사님 안녕하세요.

accounts에서 회원가입, 로그인, 로그아웃, 프로필을 설정 중인데요,

아래와 같이 url 링크를 설정해줄 시, 

어느 앱의 링크인지 구별을 해주기 위해 아래와 같이 작성해야 한다고 생각했지만 작성 후 NoReverseMatch 에러가 뜹니다.

{% url "accounts:profile" %}

어떻게 전체 레이아웃에서 {% url 'profile'  %}만 가지고 accounts/profile로 이동이 가능한가요? 
감사합니다.

 

답변 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과 충돌이 일어나지 않을까 해서 여쭙니다.

정중한 앵무새님의 프로필 이미지
정중한 앵무새

작성한 질문수

질문하기