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