[REAL Python – Django] – “모든 템플릿에서 사용할 수 있는 변수 만들기, context processor”
[REAL Python – Django] – “모든 템플릿에서 사용할 수 있는 변수 만들기, context processor”
현재 프로젝트의 구조
한 개의 프로젝트 아래 세 개의 앱으로 구성되어 있습니다. blog, singlepages, contact
이 바로 그것입니다.
사실은 blog
앱과 singlepages
앱을 굳이 분류해야 하나, 라는 고민이 있었는데.. 나중에 포트폴리오 기능 등 확장성을 위해 남겨두기로 했습니다.
이번에 생긴 문제는 프로젝트의 전체 템플릿에서 같은 변수를 사용해야 하는 경우가 생겼는데, 가장 먼저 생각나는 방법은 각 앱의 views.py
에 직접 context
를 추가해 주는 것입니다.
하지만 이 방법은 엄청 비효율적이라고 생각해 다른 방법을 찾아보던 중 방법이 있어 이를 공유하고자 합니다.
context processors
란 무엇인가?
첫째, 컨텍스트란 템플릿엣 {{ }}
로 변수를 사용하기 위해서 전해지는 딕셔너리 형태의 값입니다. 지금까지 get_context_data()
메서드를 사용해서 새로운 변수명을 넣고는 했었죠?
사용자 정의 컨텍스트 프로세서를 만들면, 마치 전역 변수와 같이 모든 템플릿에서 같은 태그를 사용할 수 있습니다.
실습 – context processor
만들기
첫째로 했던 것은 파이썬 패키지를 하나 만든 다음 임의의 파이썬 파일을 작성하는 것입니다.
위의 사진처럼 코드를 작성해 줍니다. 파이썬 패키지의 이름, 해당 패키지 안에 있는 모듈과 함수의 이름 자체는 다르게 해도 무방한 것으로 보입니다. 중요한 것은 아래 파일을 제대로 작성해 주는 것!
위처럼 settings.py
에 우리가 만든 함수를 등록해 줍니다.
실제로 작동하는지 템플릿 파일에서, 컨텍스트에서 정의했던 태그를 사용해 봅시다.
잘 동작하죠? 저의 경우, 블로그의 제목과 저자명을 저장할 수 있는 모델을 작성했습니다. 브라우저의 타이틀 등에서 사용하기 위함입니다.
from blog.models import BlogMeta
def get_global_context(request):
latestBlogAdmin = BlogMeta.objects.last().blogAdmin
latestBlogTitle = BlogMeta.objects.last().blogTitle
return {'blog_title' : latestBlogTitle, 'blog_admin_name' : latestBlogAdmin}
그리고 모델에서 가장 최근의 데이터를 가져와 컨텍스트를 리턴하는 함수를 작성해 주었습니다.
템플릿대로라면 데이터베이스에 저장된 가장 최근의 블로그 타이틀과 주인장 이름이 출력될 겁니다.
의도했던 대로 제목과 블로그 주인장 이름이 템플릿에 나타나는 것을 확인할 수 있습니다.
데이터를 새로 추가해도 새로 추가된 가장 최근의 데이터로 잘 추가되는 것을 확인할 수 있습니다. 원하는 기능을 그래도 하나하나 구현해 나가니 뿌듯하네요..
정리가 잘 돼있네요:)