2010-05-23 5 views
58

필자는 모든 뷰 (주로 사용자 정의 인증 유형 변수)에 특정 변수를 전달해야하는 시점에 왔습니다.django에서 내 자신의 컨텍스트 프로세서 만들기

내 자신의 컨텍스트 프로세서를 작성하는 것이 가장 좋은 방법이라고 들었지만 몇 가지 문제가 있습니다. 당신이 볼 수 있듯이

내 설정 파일은 내가 'context_processors'라는 모듈과 'say_hello'라는 그 내에서 기능을 가지고,이

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.contrib.messages.context_processors.messages", 
    "sandbox.context_processors.say_hello", 
) 

것 같습니다.

내가 바로 지금 내보기 내에서 다음과 같은 작업을 수행 할 수 가정하는 건가요

def say_hello(request): 
     return { 
      'say_hello':"Hello", 
     } 

처럼 보이는 무엇입니까?

{{ say_hello }} 

지금 당장 템플릿에 아무 것도 렌더링되지 않습니다.

내보기를 작성한 상황에 맞는 프로세서가 작동해야

from django.shortcuts import render_to_response 

def test(request): 
     return render_to_response("test.html") 

답변

41

것 같습니다. 문제는 당신의 시각입니다.

보기가 RequestContext으로 렌더링되고 있습니까? 예를 들어

:

def test_view(request): 
    return render_to_response('template.html') 

보기는 위의 TEMPLATE_CONTEXT_PROCESSORS에 나열된 상황에 맞는 프로세서를 사용하지 않습니다.

def test_view(request): 
    return render_to_response('template.html', context_instance=RequestContext(request)) 
+1

'context_instance'가 누락되었습니다. 감사합니다 TM – dotty

+0

후속 조치, 어떻게해야 합니까이 context_instance? django의 인증 시스템을 사용하면 어떻게해야합니까? – dotty

+0

Django의 빌트인 뷰는 이것을 처리합니다 (그들은'RequestContext'를 사용합니다). 당신이 만든 컨텍스트 프로세서에 대해 생각해보십시오. 그것은 인수로서'request'를 취합니다. 즉, 렌더링 논리에 현재 요청을 어떻게 든 전달해야합니다. 'RequestContext'는 기본적으로 모든 컨텍스트 프로세서를 루핑하고 현재 요청을 그들에게 전달한 다음 페이지 컨텍스트를 결과로 업데이트하는 간단한 논리를 처리합니다. –

24

당신이 context_instance 인수를 대신에는 render_to_response의 바로 가기로 render를 사용할 수있는 django docs에 따르면 : 또는

, 인 render() 바로 가기를 사용했는지 확인 RequestContext 그래서 같은 공급하고 있습니다 이것은 RequestContext의 사용을 강요하는 context_instance 인수로 render_to_response()를 호출 한 것과 같습니다. 당신이 사전의 내용으로 템플릿을 채우기 위해 장고의 render_to_response() 바로 가기를 사용하는 경우

+0

사실, 요즘은 가능합니다. – fabspro

2

는, 템플릿은 기본적으로 문맥 인스턴스 (안 RequestContext)에 전달됩니다. 템플릿 렌더링에 RequestContext을 사용하려면 의 사용을 강제하는 context_instance 인수와 함께 render_to_response()에 대한 호출과 동일한 바로 가기 render()을 사용하십시오.

관련 문제