2011-07-15 15 views
6

私はDjangoを初めて使用しており、アップロードファイルフォームをインクルードタグに入れようとしています。だから私はさまざまなテンプレートでそれを使用することができます。djangoインクルージョンテンプレートタグの処理要求

私は、次の包含タグ作成しました:

:私は次のエラーを取得する

 
#mypage.html 
{% extends 'base.html' %} 
{% load upload_files %} 

{% upload_handler %} 

:私はページ上のように、私は、今、テンプレートでこれを含めたい

 
#upload_files.py 

@register.inclusion_tag('upload_form.html') 
def upload_handler(context): 
    request = context['request'] 
    view_url = reverse('upload.views.upload_handler') 
    if request.method == 'POST': 
     form = UploadForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
     return HttpResponseRedirect(view_url) 

    upload_url, upload_data = prepare_upload(request, view_url) 
    form = UploadForm() 

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

 
upload_handler takes 1 arguments 

テンプレートからどのような引数を渡す必要がありますか?あなたがDjangoは関数にコンテキストオブジェクトを渡す取得するタグを登録するときにtakes_context=Trueを追加する必要が

答えて

11

:デフォルトcontextパー

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

は常に最初の引数になります!

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

サイドノート:このテンプレートタグを使用するページでは、ビューが追加のフォーム/ハンドルの投稿リクエストを特定の方法でレンダリングする可能性があるため注意してください(フォームの検証ページが別のフォームからのポストリクエストによって呼び出される場合、トリガーされます)。例えば、あなたができます。さらに、ページに複数のフォームがある場合、HTML要素の名前がrequest.POSTにあるかどうかを確認してください。

+0

私はこの問題を抱えています!私は、ログインフォームが含まれているため、私のウェブページ上のどこにでもテンプレートタグを使用しています。ログイン後、(request.POSTを介して)テンプレートタグ内の何かを変更するパラメータを渡そうとしますが、ログインtemplatetagが再びリロードされると、request.method = GET !!!私はそのパラメータを見つけることができません。どのようにそのパラメータを見つけることができますか? – juankysmith

+0

フォームが送信された後にログインビューがリダイレクトする可能性があるため、メソッドは 'GET'を再度実行しますので、リクエストデータにアクセスすることはできません。 –

+0

ログインビューはリダイレクトで終了します。 。 – juankysmith

関連する問題