반응형
[Django] context_processors
#Context_processor?
- templates에서 사용되는 변수들을 미리 정의하여, 중복 선언을 피하는 방법이다.
- 코드(프로세서 호출)에서 중복성을 추가하는 대신 데이터(템플릿 변수)에서 중복성을 제거한다.
- RequestContext를 사용하여 템플릿을 랜더링 할 때, 사용자가 정의한 프로세서를 전달한다.
- RequestContextdml의 첫번째 인수는 HttpRequest객체, 즉, view뷰 함수로 전달된 객체 request가 돼야 하며, 두번째 인수는 선택적 프로세서 인수(함수의 목록 또는 튜플)을(를) 취한다.
Ex)
View01 과 view02에서 app, user, ip-address 콘텍스트를 중복해서 사용되고 있다.
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render from django.http import HttpResponse from django.template import loader, Context from django.template import Template # Create your views here. def view01(request): t = Template('{{ app }}: {{ message }}') c = Context({ "app": "My Main-App", "user": request.user, "ip-address": request.META["REMOTE_ADDR"], "message": "I am view01!" }) return HttpResponse(t.render(c)) def view02(request): t = Template('{{ app }}: {{ message }}') c = Context({ "app": "My Main-App", "user": request.user, "ip-address": request.META["REMOTE_ADDR"], "message": "I am view02!" }) return HttpResponse(t.render(c))
Context Processor를 생성하고,
Context를 RequestContext로 변경하여 정의한 Context_processors를 사용한다.
아래에서 선택적 프로세서 인수로 튜플과 함수 모두 사용한다.
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render from django.http import HttpResponse from django.template import RequestContext from django.template import Template # Create your views here. # context processor 추가 def contextProcessor(request): # 함수 명은 사용자 임의로 사용 가능하다. return { "app": "My Main-App", "user": request.user, "ip-address": request.META["REMOTE_ADDR"], } def view01(request): t = Template('{{ app }}: {{ message }}') c = RequestContext(request, {"message" : "I am view01!"}, [contextProcessor]) return HttpResponse(t.render(c)) def view02(request): t = Template('{{ app }}: {{ message }}') c = RequestContext(request, {"message": "I am view02!"}, [contextProcessor]) return HttpResponse(t.render(c))
참고 : 장고마스터하기
반응형
'Python > Django' 카테고리의 다른 글
[Django] Performing raw SQL queries : SQL 쿼리 맵핑 (0) | 2019.01.21 |
---|---|
[Django] Custom template tags and filters 사용자 정의 템플릿 태그(1) (0) | 2019.01.19 |
[Python][Django] HttpRequest 객체 정보 (0) | 2019.01.12 |
[Python][Django] 모델 (0) | 2019.01.11 |
[Python][Django] settings.py 의 Database API (0) | 2019.01.10 |