django(以及一般的python)的新手。我試圖自定義我的一個表單,希望知道最好的方法來做到這一點。Django表單模板定製
舉例如下,一個帶有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>...
我所希望做的是對的權重字段在輸入標籤後插入額外的元素並自定義文本和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.html_output返回的as_foobar這樣的表單上設置一個方法。但是我發現只允許指定像「normal_row」,「error_row」等值。我想爲此表單編寫一個自定義模板,然後從模型上的方法返回html,然後我可以從模板中訪問該方法。 (或者重寫此模型的as_p方法以根據字段返回自定義html)。
希望這是有道理的。
你可以創建一個自定義的[widget](https://docs.djangoproject.com/en/1.10/ref/forms/widgets/)並像在'targetDate'上一樣使用。 – Tiago
我認爲一個自定義小部件是我想要的。我檢查出這個鏈接,並相信如果我重寫渲染方法,我可以生成所需的HTML,然後在我使用它的任何地方都會根據需要渲染表單。感謝您指點我正確的方向。 – hurlbz