7

私はDjangoを初めて使用し、アップロードファイルフォームを包含タグに入れようとしています。そのため、さまざまなテンプレートで使用できます。

次の包含タグを作成しました。

#upload_files.py

@register.inclusion_tag('upload_form.html')
def upload_handler(コンテキスト):
    リクエスト = コンテキスト['リクエスト']
    view_url = 逆('upload.views.upload_handler')
    request.method == 'POST' の場合:
        フォーム = UploadForm(request.POST, request.FILES)
        form.is_valid() の場合:
            フォーム.保存()
        HttpResponseRedirect(view_url) を返す

    upload_url、upload_data = prepare_upload(リクエスト、view_url)
    フォーム = UploadForm()

    upload_model_list = UploadModel.objects.all().order_by('-pub_date')

これをテンプレートに含めたいので、私が持っているページで:

#mypage.html
{% 拡張 'base.html' %}
{% load upload_files %}

{% upload_handler %}

次のエラーが表示されます。

upload_handler は 1 つの引数を取ります

テンプレートからどの引数を渡す必要がありますか?

4

1 に答える 1

13

takes_context=Trueタグを登録するときに、django がコンテキスト オブジェクトを関数に渡すように追加する必要があります。

@register.inclusion_tag('upload_form.html', takes_context=True)

デフォルトでcontextは、常に最初の引数になります!

詳細については、包含タグに関する django のドキュメントを参照してください。

補足: このテンプレート タグを使用するページは慎重に決定してください。ビューが追加のフォームをレンダリングしたり、特定の方法で投稿リクエストを処理したりすると、タグが提供するロジックと衝突する可能性があります (たとえば、次の場合にフォームの検証がトリガーされます)。このページは、別のフォームからの投稿リクエストによって呼び出される場合があります)。たとえば、次のことができます。request.POSTページに複数のフォームがある場合は、HTML 要素の名前が含まれているかどうかをさらに確認してください。

于 2011-07-16T00:48:58.167 に答える