Hướng dẫn xây dựng Django forms cơ bản (P2)
Các bạn tiếp tục đến với phần 2 của hướng dẫn xây dựng Django forms cơ bản và trong phần này nội dung chính sẽ là làm việc với form.
Làm việc với form:
Kết xuất form:
- Đối với form chúng ta sẽ có những tuỳ chọn đầu ra khác nhau cho cặp thẻ
<label>
/<input>
:
{{ form.as_table }}
sẽ hiển thị chúng dưới dạng các ô trong bảng được bao trong các thẻ<tr>
{{ form.as_p }}
sẽ làm cho chúng được bao trong các thẻ<p>
{{ form.as_ul }}
sẽ làm cho chúng được bọc trong các thẻ<li>
Ví dụ như:
<p><label for="id_subject">Subject:</label>
<input id="id_subject" type="text" name="subject" maxlength="100" required></p>
<p><label for="id_message">Message:</label>
<textarea name="message" id="id_message" required></textarea></p>
<p><label for="id_sender">Sender:</label>
<input type="email" name="sender" id="id_sender" required></p>
<p><label for="id_cc_myself">Cc myself:</label>
<input type="checkbox" name="cc_myself" id="id_cc_myself"></p>
id_<field-name>
, được tham chiếu bởi thẻ nhãn đi kèm. Điều này rất quan trọng trong việc đảm bảo rằng các form tiếp cận được với các công nghệ hỗ trợ như phần mềm đọc màn hình và dĩ nhiên bạn cũng có thể tuỳ chỉnh nhãn và id.
Hiển thị các trường theo cách thủ công:
Ở Django thì mội trường sẽ có sẵn dưới dạng là một thuộc tính của form để sử dụng và sẽ được hiển thị thích hợp. Ví dụ: {{ form.name\_of\_field }}
{{ form.non_field_errors }}
<div class="fieldWrapper">
{{ form.subject.errors }}
<label for="{{ form.subject.id_for_label }}">Email subject:</label>
{{ form.subject }}
</div>
<div class="fieldWrapper">
{{ form.message.errors }}
<label for="{{ form.message.id_for_label }}">Your message:</label>
{{ form.message }}
</div>
<div class="fieldWrapper">
{{ form.sender.errors }}
<label for="{{ form.sender.id_for_label }}">Your email address:</label>
{{ form.sender }}
</div>
<div class="fieldWrapper">
{{ form.cc_myself.errors }}
<label for="{{ form.cc_myself.id_for_label }}">CC yourself?</label>
{{ form.cc_myself }}
</div>
<label>
bạn có thể tạo được bằng cách sử dụng label_tag() như:
<div class="fieldWrapper">
{{ form.subject.errors }}
{{ form.subject.label_tag }}
{{ form.subject }}
</div>
<ul class="errorlist">
<li>Sender is required.</li>
</ul>
Đồng thời, bạn còn có thể tuỳ giao diện hiển thị lỗi ví dụ như sau:
{% if form.subject.errors %}
<ol>
{% for error in form.subject.errors %}
<li><strong>{{ error|escape }}</strong></li>
{% endfor %}
</ol>
{% endif %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
hidden_fields()
và visible_fields()
một cách độc lập. Và điều đó cũng nhằm tăng bảo mật vì thông thường lỗi nằm trong hidden_fields() là dấu hiệu giả mạo form.
Tái sử dụng các form:
Nếu trang web của bạn sử dụng cùng một logic kết xuất cho các biểu mẫu ở nhiều nơi, bạn có thể giảm sự trùng lặp bằng tạo vòng lặp của form trong một form độc lập và sau đó ghi đè thuộc tính template_name
lên form:
# In your template:
{{ form }}
# In form_snippet.html:
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}