2017-08-28 22 views
1

現在、私はほとんど2まったく同じテンプレートを持っており、彼らは同じDjangoのフォームを使用しますが、アクションメソッドでこれらの2つの形式で変更のみ1パラメータがあり、それは、Djangoテンプレートを再利用するには?

Djangoのフォーム

です
class DropDownMenu(forms.Form): 
    week = forms.ChoiceField(choices=[(x,x) for x in range(1,53)] 
    year = forms.ChoiceField(choices=[(x,x) for x in range(2015,2030)] 

テンプレート1

<form id="search_dates" method="POST" action="/tickets_per_day/"> 
    <div class="row"> 
     <div style="display:inline-block"> 
      <h6>Select year</h6> 
       <select name="select_year"> 
       <option value={{form.year}}></option> 
       </select> 
     </div> 
    <button type="submit">Search</button> 
    </div> 
</form> 

テンプレート2

<form id="search_dates" method="POST" action="/quantitative_analysis/"> 
    <div class="row"> 
     <div style="display:inline-block"> 
      <h6>Select year</h6> 
       <select name="select_year"> 
       <option value={{form.year}}></option> 
       </select> 
     </div> 
    <button type="submit">Search</button> 
    </div> 
</form> 

アクションメソッドで変わるので、それが唯一のアクションメソッドに変化つのテンプレートを再利用することが可能である場合、私は知りたいのですが唯一のもの。可能であれば、コードを手伝ってもらえますか?

この質問はdjango - how to reuse a template for nearly identical models?となっていますが、ここではテンプレートを使用していません。

+0

あなたはビューセット自体からアクション属性を送ることができますが、テンプレート – Robert

答えて

6

もちろん方法があります。レスキューに{% include %}

このように、自分のフォームの基本テンプレートを作成します。

<!-- form_template.html --> 

<form id="search_dates" method="POST" action="{{ action }}"> 
    <div class="row"> 
     <div style="display:inline-block"> 
      <h6>Select year</h6> 
       <select name="select_year"> 
       <option value={{form.year}}></option> 
       </select> 
     </div> 
    <button type="submit">Search</button> 
    </div> 
</form> 

お知らせプレースホルダaction。次のステップでそれが必要になります。

<!-- a_template.html --> 

{% include 'form_template.html' with action='/tickets_per_day/' %} 


<!-- b_template.html --> 

{% include 'form_template.html' with action='/quantitative_analysis/' %} 
+0

を再利用することができます: 'action =/tickets_per_day /'を使用して 'action = ...'にスペースを入れないでください。 'キーワード引数を認識できないタグを持つDjango'エラーが発生します。 –

1

をよくご意見からあなたがコンテキストでactionを渡すことができますし、2を作成する必要はありません、このようにテンプレートでそれを使用します。

さて、あなたは単に書き込むことによって、このテンプレートを再利用することができます別々のテンプレート。

def my_view_a(request): 
    ctx = {'action': '/tickets_per_day/'} 
    return render(request, 'abc.html', ctx) 

def my_view_b(request): 
    ctx = {'action': '/quantitative_analysis/'} 
    return render(request, 'abc.html', ctx) 

は次にテンプレートであなたは、単にだろう:上記のコードで

<form id="search_dates" method="POST" action="{{ action }}"> 

をアクションは、URLパスを解決するためにreverseを使用することをお勧めハードコードされたテンプレート名を2つのビューで使用されるabc.htmlであると言うことができます名前:

ctx = {'action': reverse('namespace:url_name')} # replace namespace and url_name with actual values 
0

template2でこれを使用します。

{% include "template1.html" with form=form %} 

これは機能します。

関連する問題