目前,我有几乎两个完全相同的模板,并且它们使用相同的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 :(得分:7)
当然有办法。 {% 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/' %}
答案 1 :(得分:1)
根据您的观点,您可以在上下文中传递action
并在模板中使用它,这样您就不必创建两个单独的模板。假设两个视图使用的模板名称为abc.html
:
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 }}">
在上面的代码中,操作更难以编码,以便使用reverse按名称解析网址路径:
ctx = {'action': reverse('namespace:url_name')} # replace namespace and url_name with actual values
答案 2 :(得分:0)
在template2
:
{% include "template1.html" with form=form %}
它会起作用。