2010-01-25 3 views
3

Django의 템플릿 로더가 HTML이 오래되었다고 판단되면 SHPAML을 통해로드하는 (즉, 직접 또는 확장/포함을 통해) 모든 템플릿을 실행할 수 있습니까?Django의 템플릿 로더에서 SHPAML을 사전 처리 하시겠습니까?

전체 디렉토리에서 SHPAML을 재귀 적으로 호출하는 방법을 알고 있지만 필요할 때마다 실행할 수 있으므로 SHPAML 소스를 변경할 때마다 HTML을 동기화하는 것을 기억할 필요가 없습니다.

admin.py에서 SHPAML을 호출하는 것은 적어도 테스트 서버에서는 작동하지만 Django의 템플릿 엔진을 해킹하여 전 처리기를 통해로드하는 모든 파일을 실행 가능하게하는 것이 좋을 것 같습니다.

from django.template.loaders.app_directories import Loader 
from shpaml import convert_text 

class SHPAMLLoader(Loader): 
    def load_template_source(self, *args, **kwargs): 
     shpaml_source = super(SHPAMLLoader, self).load_template_source(*args, **kwargs) 
     html = convert_text(shpaml_source) 
     return html 

는 그 다음 TEMPLATE_LOADERS 튜플의 시작 부분에서 귀하 로더를 넣어 :

+0

내가 추가이 발견을 위해 유용하게 사용할 수있는 생각 명령을'manage.py' : http://docs.djangoproject.com/en/1.1/howto/custom-management-commands/ --- 안타깝게도 "주문형"부분으로는 도움이되지 않습니다. –

답변

3

나는 예를 들어, (또는 무엇이든 로더 사용) django.template.loaders.app_directories.Loader에서 상속과 load_template_source 방법을 덮어 써서 당신은 당신이 원하는 것을 얻을 수 있습니다 의심 귀하의 settings.py. 물론 템플리트가로드 될 때마다 SHPAML 대 HTML 댄스를 수행하므로 약간의 오버 헤드가 발생할 수 있습니다. 다가오는 Django 1.2는 템플릿 캐싱 기능을 통해 오버 헤드를 줄이는 데 도움이 될 수 있습니다 ...

면책 조항 :이 코드는 완전히 테스트되지 않았습니다. 죄송합니다.

+0

이것은 내가 바라던 것이 아니지만 꽤 가까웠다. 특히 캐싱 문제 (템플릿은 소스 파일이 변경된 경우에만 사전 처리되어야하며, 그렇지 않으면 전처리 된 파일이로드되어야하며 SHPAML 소스는로드되지 않아야 함)과 관련하여 도움이되지 않습니다. 그것은 올바른 방향으로 나아가는 단계 일 것입니다. –

1

piquadrat의 답변에있는 스 니펫을 기반으로 프로젝트를 만들었습니다. 그것은 좀 더 기능 완전한 그리고 지원 (아마 1.0도) 장고 1.1 및 1.2

  • django-shpaml-template-loader on bitbucket
    • 가 미래 :

    관련 문제