0

レイアウト (テンプレート) でビューを呼び出す方法は?

例: ウェブサイトのすべてのページにフォームがあります。各ページの CSRF トークンを生成する必要がありますが、すべてのビューに生成コードを配置したくありません。

ありがとうございました。

4

2 に答える 2

1

Django では、テンプレートに到達すると、Zend の Action Helper の効果を得るために何かを呼び出すことができるとは思えません。明らかに、Django で公開されている URL に対して AJAX 呼び出しを実行し、必要なデータを取得できます。その場合、次のように ajax 呼び出しに csrf トークンを提供できます。

$.ajaxSetup({data: {csrfmiddlewaretoken: '{{ csrf_token }}' },});

100% 確実ではありませんが、Zend の Action Helper のようなものをデコレータ(リクエストを処理する前に選択した複数のビューに適用できます) またはコンテキスト プロセッサ(処理されたすべてのビューに適用されます) に実装できます。リクエスト)。

于 2012-10-30T14:03:16.650 に答える
0

フォームが単なる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>
于 2012-10-30T13:36:57.963 に答える