テンプレートで期待されるフィールドのリストを返す関数はありますか? たとえば、次のテンプレートがあります。
hello i am {{ name }}. {% for i in docs %} i have doc {{ i }}
ファイルに書かれています。そして、次を含むdictを取得したい:
{'name': 'str', 'docs': 'list'}
そのようなものはありますか、それとも自分で書かなければなりませんか?
私の知る限り、いいえ....
テンプレートには、いくつかの html といくつかのプレース ホルダーが含まれています (それ以外の場合もあります)。何render_to_template
をしているのかというと、いくつかのキーとそのキーに添付されたデータとテンプレートを含むコンテキスト ディクショナリを取得します。次に、キー名に従ってこれらのプレースホルダーに値を配置し、いくつかのループを実行するか、テンプレートに{% if...%}
またはのような制御フローが含まれているかどうかの条件チェックを実行します。{%for....%}
がTEMPLATE_DEBUG
設定で閉じられていて、コンテキスト ディクショナリに一致するキーがないプレース ホルダーがある場合、エラーを発生させずにそれをスキップします。
また、フォーム オブジェクトをテンプレートに渡し、オブジェクトをそのままテンプレートに直接配置する場合 (各フィールドを個別に呼び出さずに) [例:{{form}}
または{{form.as_p}}
、django はフォーム上のフィールドをチェックし、ここに示されているように配置します。そのような状況では、フォームが使用されていることしかわかりません。定義からどのフィールドが使用されているかを確認する必要がありますForm
。
そのプロセスに目を通してみると、コンテキスト辞書を配置するために何が必要かがわかります。テンプレートを解析するパーサーを作成することもできますが、テンプレートを調べて不足しているデータを見つけるよりもはるかに難しいと思います。
ビルトインの {% debug %} タグが役立つかもしれませんが、あなたが求めていることを完全に理解しているかどうかはわかりません。基本的に、テンプレートに debug タグを配置すると、テンプレートで使用可能なすべての変数を含む、多くの有用なものが出力されます。
おそらく、デバッグ タグのソース コードを調べて(そこにあるすべての変数にアクセスできるため)、これに基づいてカスタム タグタグを作成することができます。ソースを見ると、これは非常に簡単に実行できるように思えます。