レイアウト (テンプレート) でビューを呼び出す方法は?
例: ウェブサイトのすべてのページにフォームがあります。各ページの CSRF トークンを生成する必要がありますが、すべてのビューに生成コードを配置したくありません。
ありがとうございました。
Django では、テンプレートに到達すると、Zend の Action Helper の効果を得るために何かを呼び出すことができるとは思えません。明らかに、Django で公開されている URL に対して AJAX 呼び出しを実行し、必要なデータを取得できます。その場合、次のように ajax 呼び出しに csrf トークンを提供できます。
$.ajaxSetup({data: {csrfmiddlewaretoken: '{{ csrf_token }}' },});
100% 確実ではありませんが、Zend の Action Helper のようなものをデコレータ(リクエストを処理する前に選択した複数のビューに適用できます) またはコンテキスト プロセッサ(処理されたすべてのビューに適用されます) に実装できます。リクエスト)。
フォームが単なるHTMLの場合は、HTMLを含むテンプレートを作成し、他のテンプレートからのテンプレートを含める(またはベーステンプレートに含める)だけです。CSRFトークンを生成するには、 https: //docs.djangoproject.com/en/dev/ref/contrib/csrf/で説明されているように、テンプレートで{%csrf_token%}を使用するだけです。
DjangoフォームのHTMLを生成する場合は、コンテキストプロセッサを追加できます-https://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontextで説明されています-フォームを生成すると、すべてのテンプレートで使用できるようになります。
def form_processor(request):
form = Form()
return { 'form': form.as_p() }
レンプレート:
<form>{% csrf_token %}{{ {{ form }}</form>