2013-03-21 2 views
1

변수를 모든 템플릿에 전달할 수있는 방법이 있습니까? 예를 들어 나는Django는 기본값을 템플릿으로 봅니다.

render_to_response('page.html', dictionary, \ 
context_instance = RequestContext(request)) 

을 포함하고 다른 변수를 사전에없는 템플릿 파일에 전달하려는보기가 있습니다.

목표는 무엇입니까? 모든 뷰 (이백 개)에서이 변수가 필요하다고 가정하고 간단히이 변수를 사전을 만지지 않고 템플릿 파일로 전달하고 싶습니다. 그런데이 변수는 매개 변수 (요청)가있는 함수의 결과입니다.

가능합니까?

답변

6

사용자 정의 을 작성하고 싶습니다. 그것은 하나 개의 인수, HttpRequest 오브젝트를 단지 파이썬 함수, 그리고 템플릿 컨텍스트에 추가됩니다 사전을 반환

는 상황에 맞는 프로세서는 매우 간단한 인터페이스를 가지고 있습니다. 각 컨텍스트 프로세서 사전을 반환해야합니다.

사용자 정의 컨텍스트 프로세서는 코드 기반 어디에서나 사용할 수 있습니다. 장고에 관해서는 사용자 지정 컨텍스트 프로세서가 TEMPLATE_CONTEXT_PROCESSORS 설정으로 지정되어 있습니다.

예컨대 :

# in project/context_processors.py 
def add_extra_variable(request): 
    return {'extra': myfunction(request)} 

# in settings.py: 
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    "django.core.context_processors.static", 
    "django.core.context_processors.tz", 
    "django.contrib.messages.context_processors.messages", 
    "project.context_processors.add_extra_variable" 
) 

 

P.S : 당신이 render 대신 render_to_response의를 사용하는 경우, 당신은 RequestContext을 통과 할 필요가 없습니다.

render('page.html', dictionary) 
+0

안녕하세요, 그것은 매우 간단하고 좋아 보인다,하지만 난 '는 settings.py에서 기본 설정을했습니다, 그리고'TEMPLATE_CONTEXT_PROCESSORS + = ('project.context_processors.add_extra_variable ')'라인은 그 이후, 그것을 나누기 존재하지 않는다. 만약 내가 단지 그것과 동일하다면,'django.contrib.auth.context_processors.auth'와 같은 다른 것들도 놓칠 것이다. 어떤 생각이라도 어떻게 해결할 수 있니? – user2194805

+0

전체 글을 썼습니다 (편집 내 대답). (또는'django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS'). –

+0

아, 그럼 완벽하게 작동합니다. 고마워요 : -). – user2194805

관련 문제