2009-02-23 2 views
11

블로그 신청서를 작성 중이며 아카이브 페이지에 대한 링크를 제공하기 위해 블로그가 존재 해 온 모든 달의 목록을 포함하는 사이드 바를 갖고 싶습니다. 또한 템플릿으로 하드 코딩하는 대신 월이 변경 될 때 자동으로 업데이트되도록하고 싶습니다. 물론, 내가 말할 수있는 한, 이것은 월의 목록을 매번보기로 계산하고 모든보기에서 모든 템플릿에 전달해야 함을 의미합니다.Django의 모든 뷰에서 표준 정적 변수를 전달하려면 어떻게해야합니까?

가능하면이 문제를 피하고 싶습니다. 목록을 한 번 계산하고 모든보기에서 템플릿에 명시 적으로 전달하지 않고 모든 템플릿에 자동으로 적용하는 방법이 있습니까?

답변

17

을합니다.

에있는 모든 페이지에 context processor 페이지가있는 것이 가장 좋습니다. 컨텍스트 프로세서는 모든 템플릿 컨텍스트에 데이터를 주입하는 기본 방법입니다. 그러나 컨텍스트 프로세서는 요청마다 에 호출됩니다.

다른 해결책은 custom template tag을 만들고 사이드 바를 가져야하는 모든 페이지에 대해 공유 기본 템플릿에서 사용하는 것입니다. 템플릿 태그는 약간 더 복잡하지만 더 유연합니다.

두 가지 해결책 중 장고의 cache framework도 확인해야합니다. 캐시 프레임 워크를 사용하면 계산 된 값을 임시로 저장하여 각 요청에 대한 작업을 간소화 할 수 있습니다.

+1

+1은 맞춤 템플릿 태그를 언급합니다. 이것이 값이 아니라면 말 그대로 사이트의 모든 단일 페이지에서 사용할 것입니다. 이것은 컨텍스트 프로세서보다 나은 접근 방법입니다. –

4

당신은 당신의 문제에 대한 몇 가지 가능한 해결 방법이 있습니다 템플릿 상황에 맞는 프로세서

Django - having middleware communicate with views/templates

http://docs.djangoproject.com/en/dev/ref/templates/api/?from=olddocs#id1

+0

너는 너무 많이 알고있다. :) – fuentesjr

+0

-1은 분명히 혼란스러운 미들웨어 및 템플릿 컨텍스트 프로세서이며 다른 프로세서와는 아무 상관이 없습니다. –

+0

@ Carl Meyer : 나는이 구분이 인공적이라고 생각하지만, 나는 교정했다. –

0

장고의 템플릿 상속은 이것을 커버해야합니다. 사이드 바 기능을 처리하는 기본 템플릿을 만들 수 있습니다. 다른보기는이 템플리트를 확장합니다.

템플릿 상속 : 이전에 언급 template fragment caching 트릭을해야으로 사용자 정의 템플릿 태그의 http://www.djangobook.com/en/1.0/chapter04/#s-template-inheritance

+0

나는 이미 템플릿 상속을 사용하고 있습니다. 어떻게하면 각 뷰의 변수를 템플릿으로 전달하지 않아도됩니까? – mipadi

+0

죄송합니다. 첫 번째 달에 실행되는 외부 스크립트에서 기본 템플릿을 생성/수정할 수 있다는 것을 상기 답변에 추가했습니다. – Harold

0

조합.

+0

+1 조각 캐싱. 물론, 여전히 부적절한 데이터는 조각으로 가져와야합니다. 함수를 전달할 수 있도록 템플릿 코드에서 변수 조회가 수정되었습니다. params가 전달 될 필요가 없도록 카레 화 된 함수는 단편 재생성 중에 만 호출됩니다. –

관련 문제