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>
Lưu ý: mỗi trường của form có một thuộc tính ID thường được đặt là 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>
Và ở đây các <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>
Ngoài ra, Django còn có chức năng hiển thị danh sách các lỗi form giúp bạn xử lý lỗi dễ dàng hơn:
<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 %}
Đặc biệt, form trong Django sẽ hỗ trợ bạn vòng lặp {% for %}. Khi bạn muốn sử dụng cùng một đoạn HTML chọn từng trường của form thì bạn có thể giảm việc trung lặp bằng cách sử dụng {% for %}:

{% 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 %}
Django còn cung cấp hai phương thức trên biểu mẫu cho phép bạn lặp lại hai trường hidden_fields()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 %}

Công nghệ được nhắc đến trong bài viết này

Tên Công NghệPhiên BảnPhát Hành
Django---
4 phút đọc·239 lượt xem·