[英]Django form template customization
django的新手(和一般python)。 我正在嘗試自定義其中一個表單,並想知道執行此操作的最佳方法。
以下面的示例為例,該表單具有3個字段,兩個字段用於輸入重量,一個字段用於目標日期。
class BasicFitnessGoalForm(forms.ModelForm):
class Meta:
model = BasicFitnessGoal
fields = ('currentWeightKg','targetWeightKg','targetDate')
widgets = {
'targetDate': forms.DateInput(attrs={'class':'formdatepicker'}),
}
labels = {
'currentWeightKg' : "Current Weight",
'targetWeightKg' : "Goal Weight",
'targetDate' : 'Goal Date'
}
我希望能夠使用諸如GoalForm.as_p()之類的東西在我的模板中顯示此表單,該表單會生成如下所示的html:
<p>
<label></label><input><input>...
我想做的是在權重字段上的輸入標簽后插入一個額外的元素,並自定義text和css類。 所以我最終得到這樣的東西:
<p>
<label>Current Weight</label><input type=Number...><span class="customCss">Kg (or text I enter</span>
</p>
那么,是否有必要在模型類中完成此操作? 我知道我可以使用javascript或通過遍歷模板中的字段而不是使用form.as_p標記來做到這一點。 但是我想重用它,因此如果我可以創建一個方法在想要使用它的任何地方輸出所需的html,那么它是最干凈的。
我看過一些示例,您可以在as_foobar之類的表格上設置方法,並返回self.html_output。 但是我看到那只允許指定“ normal_row”,“ error_row”等值。我想為此表格編寫自定義模板,然后從模型上的方法返回html,然后可以從模板中訪問它。 (或對此模型覆蓋as_p方法,以根據字段返回自定義html)。
希望這是有道理的。
使用注釋中建議的自定義窗口小部件是一個選項,另一個選擇是手動遍歷字段。
<form action="/your-name/" method="post">
{% csrf_token %}
{{ form.non_field_errors }}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
{% if field.id_label = id_currentWeightKg" %}
<span class="customCss">Kg (or text I enter</span>
{% endif %}
</div>
{% endfor %}
<input type="submit" value="Submit" />
</form>
有關其他信息,請參閱手冊中的“ 循環表單字段”部分。
在執行此操作之前,請查看HTML源代碼並確認id_currentWeightKg
是該字段的正確ID。 如果不使用,請更換正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.