2017-10-19 12 views
2

Django 1.11에서 내장 된 위젯 템플릿을 재정의하려고 시도하고 있습니다. 이 점에서 문서가 말하는 모든 것을하고있는 것 같지만 위젯 템플릿의 경우 Django가 내 프로젝트를 전혀보고 있지 않으며 TemplateDoesNotExist 오류가 발생합니다.Django 위젯 템플릿 재정의가 프로젝트 템플릿 디렉토리에서 검색하지 않습니다. 어떻게 고치는 지?

는 여기에 내가 오버라이드에 대해이 작업은 다음과 같습니다

class MyFileWidget(widgets.FileInput): 
    template_name = 'myapp/my_file_widget.html' 

템플릿은 분명히있다. 템플릿을 렌더링 호출에 전달하면 괜찮습니다. 문제는 경로 문제입니다. 뷰에서 렌더링 호출 할 때, 그것은 다음과 같은 검사 :

projectroot/템플릿/MyApp를/my_file_widget.html djangoroot/양식/템플릿/MyApp를/my_file_widget.html

내 프로젝트의 템플릿을 발견, 그것을 렌더링합니다. 위의 클래스에서 템플릿 경로를 제공 할 때 이것은 일어나지 않습니다. 이 경우 파일이 실제로 존재하는 내 프로젝트 템플릿에서 체크하지 않고 django 경로에서 체크인을 시작합니다. 따라서 오류 메시지.

로더가 렌더 호출시 내 프로젝트 템플릿을 검사하는 이유를 모르겠지만 위젯 재정의 "template_name"을 찾을 때 그렇게하지 못합니다. 어떤 아이디어?

답변

5

기본적으로 FORM_RENDERER 설정의 기본값은 'django.forms.renderers.DjangoTemplates'입니다.

이렇게하면 앱 템플릿 디렉토리 (예 : projectroot/myapp/templates/myapp/my_file_widget.html)를 확인하지만 프로젝트 템플릿 디렉토리 (예 : projectroot/templates/myapp/my_file_widget.html)를 확인하지 않습니다.

TEMPLATES 설정과 동일한 구성을 사용하려면 TemplatesSetting 렌더러를 사용해야합니다.

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting' 

당신은 또한 장고는 여전히 위젯 ​​템플릿에 내장 사용할 수 있도록 TEMPLATES 설정을 업데이트해야합니다. 가장 쉬운 방법은 django.formsINSTALLED_APPS에 추가하는 것입니다. 이에 대한 자세한 내용은 the docs을 참조하십시오.

+0

방금 ​​답변을 게시하려고했습니다. 그렇게 할 것입니다. 참고로 DjangoTemplates가 내 프로젝트 템플릿을 확인하지 못했습니다. 대신, 장고 템플릿을 보는 것, 그래서 그 비트가 정확한지 모르겠다. 또 다른 해결책은 폼별로 "default_renderer"를 할당하는 것입니다.하지만 물론 FORM_RENDERER를 변경하는 것이 더 좋습니다. – meesterguyperson

+1

내가 말했듯이,'DjangoTemplates'는 의도적으로 프로젝트 템플릿을 확인하지 않습니다. 'django.contrib' 앱, 타사 또는 프로젝트의 일부인지 여부에 관계없이 템플릿 디렉토리에서 INSTALLED_APPS의 모든 앱을 확인해야합니다. 'projectroot/templates/myapp/my_file_widget.html'에 템플릿을 저장하고 있다면,'myapp'에는'projectroot/myapp/templates /'템플릿 디렉토리가 없습니다. – Alasdair

+0

아, 잡았다. 나는 오해했다고 생각한다. 그러면 좋아 보인다. 그레 시아! – meesterguyperson