장고 에러 발생시 해결 방안
에러난 코드 읽는 법
코딩을 하다 보면 이와 같은 문제들을 종종 발견한다. 이때 문제를 해결하기 위해 우리가 봐야 할 것은 error during template rendering- 즉 템플릿을 렌더링 하면서 생긴 문제입니다 라며 밑에 어디서 문제가 생겼는지 경로를 알려주는데 그 안에를 자세히 보면 templates 안에 있는 articles.html에서 문제가 생기고 있는 것을 알 수 있다. 친절하게 에러가 난 라인까지 알려주는데 위에 예시에서 보면 line 5에서 문제가 생기고 있음을 알 수 있다.
대부분의 문제는 따옴표''를 제대로 안 해주었거나, 콤마를 안 찍어 주었거나, 단어를 틀리게 써서 못 찾는 경우가 많으니 그런 점을 유의해서 보면 쉽게 문제를 파악해서 해결할 수 있다.
처음부터 app_name을 지정하고 만들자
위의 경우의 에러해결방법을 알아보자. url에 이름공간을 만들어주고 나면, namespace:url_name형태로 사용해야 한다.
{% url 'articles:hello' %}
redirect('articles:hello')
이 url들의 Name을 참조하고 있는 모든 곳들을 수정해야 하기 때문에 처음부터 app_name을 지정하고 만들면 좋다.
{% url 'create' %} -> {% url 'articles:create' %}
redirect('create') -> redirect('articles:create')
{% url 'profile' %} -> {% url 'users:profile' %}
redirect('profile') -> redirect('users:profile')
만약 같은 이름의 템플릿이 여러 개라면?
Django는 Apps를 하나씩 돌면서 App 안에 templates가 있으면 들어가서 이름과 일치하는 템플릿을 꺼내오는 로직을 반복하기 때문에, 우선 세팅즈의 순서가 어떻게 되어있는지를 잘 봐야 한다.
예를 들어,users앱에도 index.html이 있고 articles앱에도 index.html 이 있다고 가정해 보자.
아래와 같이 템플릿을 사용할 때는 <app_name>/template.html으로 사용하면 문제가 해결된다.