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」を探しているときは、このようにしていません。何か案は?
回答を投稿しよう!それはそれを行います。参考までにDjangoTemplatesが自分のプロジェクトテンプレートをチェックしているのを見たことがありませんでした。代わりに、ちょうどDjangoのテンプレートを見ているようだ、そのビットが正しいことを知らない。別の解決策は、フォームごとに「default_renderer」を割り当てることですが、もちろんFORM_RENDERERを変更する方が優先されます。 – meesterguyperson
私が言ったように、 'DjangoTemplates'はプロジェクトテンプレートを設計どおりにチェックしません。 'django.contrib'アプリ、サードパーティ、プロジェクトの一部であるかどうかにかかわらず、' INSTALLED_APPS'にあるすべてのアプリのテンプレートディレクトリをチェックする必要があります。 'projectroot/templates/myapp/my_file_widget.html'にテンプレートを保存している場合、' myapp'には 'projectroot/myapp/templates /'というテンプレートディレクトリがありません。 – Alasdair
ああ、つまらない。私は誤解していると思う。その後、よく見える。グラシアス! – meesterguyperson