2010-11-04 61 views
0

我需要在django模板中放置一组div。 最简单的方法是做是如何正确生成django模型的html

MyForm的()。as_table()

copypaste那和封装领域的组适当的股利。唯一的问题是,当表单验证出现错误时,此方法失败,因为{{form.fieldname.errors}}在任何地方都没有提及。

任何更好的想法或现成的工具,会让我无法每次手工做这件事?

这里就是答案,如果有人需要它

def generate_object_template(object): 
    from string import Template 
    for field in object._meta.fields: 
      t = Template(""" <label>{{ form.$fieldname.label }}{% if form.$fieldname.is_required %}*{% endif %}</label> 
      {{ form.$fieldname }} 
      {% if form.$fieldname.errors %} {{ form.$fieldname.errors }}{% endif %}""").substitute(fieldname=field.attname)         
      print t 

回答

1

当你要自定义Django的形式,你可以做如下

... 
<label>{{ form.myfield.label }}{% if form.myfield.is_required %}*{% endif %}</label> 
{{ form.myfield }} 
{% if form.myfield.errors %} {{ form.myfield.errors }}{% endif %} 

<label>{{ form.myfield3.label }}{% if form.myfield3.is_required %}*{% endif %}</label> 
{{ form.myfield3 }} 
{% if form.myfield3.errors %} {{ form.myfield3.errors }}{% endif %} 

<label>{{ form.myfield2.label }}{% if form.myfield2.is_required %}*{% endif %}</label> 
{{ form.myfield2 }} 
{% if form.myfield2.errors %} {{ form.myfield2.errors }}{% endif %} 
... 

有了这样的设置可以自定义表单在你想要的地方添加div,然后继续进行验证。

http://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template

+0

你所写的不允许我把DIV元素周围3,4,5,就在所有的元素或单个元素 – damir 2010-11-04 11:38:33

+0

确定删除{%for循环%}我犯了一个错误不要使用for循环只是把你的平坦的领域 – coulix 2010-11-04 12:25:28

+1

我从来没有理解这里的灵活性。这是我最大的(尽管仍然很小)与Django抱怨。我还创建了一个特殊的“表单循环”,其中包含变量,用于处理标题,特殊标签等内容。 – jMyles 2010-11-04 19:25:52