来自django / forms / forms.py:
def label_tag(self, contents=None, attrs=None):
..
def as_widget(self, widget=None, attrs=None, only_initial=False):
..
在我的模板中,我按如下方式调用label_tag:
{{ form.my_field.label_tag }}
输出标签。
我应该如何在定义中为这些标记提供参数? 例如,我想提供另一种标签文本和css类。
我尝试过类似的事情:
{{ form.my_field.label_tag contents='My alternative label' }}
但它给了我:
Could not parse the remainder: ' contents='My alternative label'' from 'form.code.label_tag contents='My alternative label''
attrs领域同样如此。我可以从模板中提供该值的值吗?我想提供css类。 对于css类,我现在正在使用过滤器,但在浏览Django源代码时,我注意到label_tag和as_widget有这些额外的参数,这就是为什么我现在想知道我可以从我的模板中提供它们。
(我在App Engine上使用Django 1.4)
答案 0 :(得分:0)
Django非常刻意地限制模板功能,以确保您不会像使用PHP那样在模板中编写整个网站。
来自The Django Book 2.0: Templates: Philosophies and Limitations:
...直接在Django中调用Python代码是不可能的 模板。所有“编程”从根本上限于范围 什么模板标签可以做。
你可以 write a custom template tag or filter做你想要的...... 但是 - 因为这似乎是形式逻辑 - 你几乎肯定会做得更好别的什么。
最简单的方法是定义表单定义的标签/小部件。即:
from django import forms
class MyForm(forms.Form):
my_field = forms.CharField(label='My label', widget=forms.Textarea)
也就是说,对于小部件,有other documented ways。如果您使用django-floppy-forms,则可以轻松覆盖用于渲染它们的整个模板。
最后,我强烈推荐django-crispyforms。它可以为您节省大量时间,因为您不再需要在模板中手写表单。