• 定制Form设计

    定制Form设计

    在上面的contact_form.html 模板中我们使用{{form.as_table}} 显示表单,不过我们可以使用其他更精确控制表单显示的方法。

    修改form的显示的最快捷的方式是使用CSS。 尤其是错误列表,可以增强视觉效果。自动生成的错误列表精确的使用<ul class=”errorlist”>,这样,我们就可以针对它们使用CSS。 下面的CSS让错误更加醒目了:

    1. <style type="text/css">
    2. ul.errorlist {
    3. margin: 0;
    4. padding: 0;
    5. }
    6. .errorlist li {
    7. background-color: red;
    8. color: white;
    9. display: block;
    10. font-size: 10px;
    11. margin: 0 0 3px;
    12. padding: 4px 5px;
    13. }
    14. </style>

    虽然,自动生成HTML是很方便的,但是在某些时候,你会想覆盖默认的显示。 {{form.as_table}}和其它的方法在开发的时候是一个快捷的方式,form的显示方式也可以在form中被方便地重写。

    每一个字段部件(<input type=”text”>, <select>, <textarea>, 或者类似)都可以通过访问{{form.字段名}}进行单独的渲染。

    1. <html>
    2. <head>
    3. <title>Contact us</title>
    4. </head>
    5. <body>
    6. <h1>Contact us</h1>
    7. {% if form.errors %}
    8. <p style="color: red;">
    9. Please correct the error{{ form.errors|pluralize }} below.
    10. </p>
    11. {% endif %}
    12. <form action="" method="post">
    13. <div class="field">
    14. {{ form.subject.errors }}
    15. <label for="id_subject">Subject:</label>
    16. {{ form.subject }}
    17. </div>
    18. <div class="field">
    19. {{ form.email.errors }}
    20. <label for="id_email">Your e-mail address:</label>
    21. {{ form.email }}
    22. </div>
    23. <div class="field">
    24. {{ form.message.errors }}
    25. <label for="id_message">Message:</label>
    26. {{ form.message }}
    27. </div>
    28. <input type="submit" value="Submit">
    29. </form>
    30. </body>
    31. </html>

    {{ form.message.errors }} 会在 &lt;ul class="errorlist"&gt; 里面显示,如果字段是合法的,或者form没有被绑定,就显示一个空字符串。 我们还可以把 form.message.errors 当作一个布尔值或者当它是list在上面做迭代, 例如:

    1. <div class="field{% if form.message.errors %} errors{% endif %}">
    2. {% if form.message.errors %}
    3. <ul>
    4. {% for error in form.message.errors %}
    5. <li><strong>{{ error }}</strong></li>
    6. {% endfor %}
    7. </ul>
    8. {% endif %}
    9. <label for="id_message">Message:</label>
    10. {{ form.message }}
    11. </div>

    在校验失败的情况下, 这段代码会在包含错误字段的div的class属性中增加一个”errors”,在一个有序列表中显示错误信息。