新聞中心
您只需將表單實(shí)例放到模板的上下文中即可。因此,如果您的表單在上下文中叫 ?form ?,那么 ?{{ form }}? 將渲染它相應(yīng)的 ??和??元素。

公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、成都做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出北川羌族免費(fèi)做網(wǎng)站回饋大家。
表單渲染選項(xiàng)
對(duì)于 ?? / ?? 對(duì),還有其他輸出選項(xiàng):
- ?
{{ form.as_table }}? 會(huì)將它們呈現(xiàn)為包裹在 ?? 標(biāo)簽中的表格單元格 - ?
{{ form.as_p }}? 會(huì)將它們呈現(xiàn)在 ?? 標(biāo)簽中- ?
{{ form.as_ul }}? 會(huì)將它們呈現(xiàn)在 ?? 標(biāo)簽中注意,您必須自己提供外層的 ?
? 或 ?
? 元素。
下面是我們 ?ContactForm?實(shí)例用?{{ form.as_p }}? 的輸出:請(qǐng)注意,每個(gè)表單字段都有一個(gè) ?
id_? 這樣的ID屬性,它被附帶的?label?標(biāo)簽引用。這對(duì)于確保表單可供屏幕閱讀軟件這樣的輔助技術(shù)訪問(wèn)非常重要手動(dòng)渲染字段
我們沒有必要非要讓Django來(lái)解包表單字段;如果我們喜歡,可以手動(dòng)來(lái)處理(比如,讓我們對(duì)字段重新排序)。每個(gè)字段都可以用 ?
{{ form.name_of_field }}? 作為表單的一個(gè)屬性,并被相應(yīng)的渲染在Django模板中。例如:{{ form.non_field_errors }}{{ form.subject.errors }} {{ form.subject }}{{ form.message.errors }} {{ form.message }}{{ form.sender.errors }} {{ form.sender }}{{ form.cc_myself.errors }} {{ form.cc_myself }}完整的 ?
? 元素還可以使用 ?label_tag()? 來(lái)生成。例如:{{ form.subject.errors }} {{ form.subject.label_tag }} {{ form.subject }}渲染表單錯(cuò)誤信息
這種靈活性的代價(jià)需要多做一點(diǎn)工作。到目前為止,我們不必?fù)?dān)心如何顯示表單的錯(cuò)誤信息,因?yàn)樗鼈円呀?jīng)幫我們處理好了。下面的例子中,我們需要自己處理每個(gè)字段的錯(cuò)誤信息以及表單整體的所有錯(cuò)誤信息。注意表單頂部的 ?
{{ form.non_field_errors }}? 以及模板中對(duì)每個(gè)字段查找錯(cuò)誤信息。使用 ?
{{ form.name_of_field.errors }}? 顯示該字段的錯(cuò)誤信息列表,它被渲染成無(wú)序列表??雌饋?lái)如下:- Sender is required.
該列表有一個(gè)CSS class ?
errorlist?,允許您自定義其樣式。如果你想進(jìn)一步自定義錯(cuò)誤信息的顯示,您可以通過(guò)遍歷它們來(lái)實(shí)現(xiàn):{% if form.subject.errors %}-
{% for error in form.subject.errors %}
- {{ error|escape }} {% endfor %}
非字段驗(yàn)證錯(cuò)誤信息(或者通過(guò)使用像 ?
form.as_p()? 這樣的輔助方法渲染產(chǎn)生在表單頂部的隱藏錯(cuò)誤信息)渲染后會(huì)額外帶上一個(gè)class ?nonfield?以便與字段驗(yàn)證錯(cuò)誤信息區(qū)分。例如, ?{{ form.non_field_errors }}? 渲染后會(huì)像這樣:- Generic validation error
遍歷表單字段
如果您要給每個(gè)表單字段使用相同的HTML,您可以用 ?
{% for %}? 依次循環(huán)遍歷每個(gè)字段來(lái)減少重復(fù)代碼:{% for field in form %}{{ field.errors }} {{ field.label_tag }} {{ field }} {% if field.help_text %}{% endfor %}{{ field.help_text|safe }}
{% endif %}{{ field }} 的有用屬性包括:
?
{{ field.label }}?字段的?
label?,比如 ?Email??address?。?
{{ field.label_tag }}?該字段的?
label?封裝在相應(yīng)的HTML ?? 標(biāo)簽中。它包含表單的 ?label_suffix?。例如,默認(rèn)的 ?label_suffix?是一個(gè)冒號(hào):?
{{ field.id_for_label }}?
用于該字段的 ID(像上面的例子中的 id_email )。如果您要手動(dòng)構(gòu)建label,您可能要用這個(gè)來(lái)替換 label_tag 。例如,如果你有一些內(nèi)嵌的JavaScript并且想要避免硬編碼字段的ID,這也很有用。
?{{ field.value }}?
字段的值。例如 someone@example.com
?{{ field.html_name }}?
字段名稱:用于其輸入元素的name屬性中。如果設(shè)置了表單前綴,它也會(huì)被加進(jìn)去。
?{{ field.help_text }}?
與該字段關(guān)聯(lián)的幫助文本
?{{ field.errors }}?
輸出一個(gè) ?? ,其中包含這個(gè)字段的所有驗(yàn)證錯(cuò)誤信息。你可以使用 ?{% for error in field.errors %}? 循環(huán)來(lái)自定義錯(cuò)誤信息的顯示。在這種情況下,循環(huán)中的每個(gè)對(duì)象是包含錯(cuò)誤信息的字符串。?
{{ field.is_hidden }}?
如果是隱藏字段,這個(gè)屬性為 True ,否則為 False 。它作為模板變量沒多大作用,但可用于條件測(cè)試,例如:{% if field.is_hidden %} {# Do something special #} {% endif %}?
{{ field.field }}?
表單類中的 ?Field?實(shí)例由 ?BoundField?封裝。您可以用它來(lái)訪問(wèn) ?Field?的屬性,比如?{{ char_field.field.max_length }}? 。遍歷隱藏字段和可見字段
如果您在手動(dòng)布置模板中的表單,而不是依靠Django的默認(rèn)表單布局,您可能希望將 ?
? 字段與非隱藏字段區(qū)別開來(lái)。例如,因?yàn)殡[藏字段不顯示任何內(nèi)容,將錯(cuò)誤消息放到該字段旁邊可能會(huì)導(dǎo)致用戶混淆——所以這些字段的錯(cuò)誤應(yīng)該以不同的方式處理。
Django在表單上提供了兩種方法,允許您獨(dú)立地遍歷隱藏和可見的字段: ?hidden_fields()? 和 ?visible_fields()? 。以下是使用這兩種方法對(duì)之前示例的修改:{# Include the hidden fields #} {% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %} {# Include the visible fields #} {% for field in form.visible_fields %}{{ field.errors }} {{ field.label_tag }} {{ field }}{% endfor %}這個(gè)示例沒有處理隱藏字段中的任何錯(cuò)誤信息。通常,隱藏字段中的錯(cuò)誤象征著表單被篡改,因?yàn)檎5谋韱谓换ゲ粫?huì)去改變它們。但是,您也可以輕松地為這些表單錯(cuò)誤插入一些錯(cuò)誤信息顯示出來(lái)。
可復(fù)用的表單模板
如果你的網(wǎng)站在多個(gè)地方使用相同的表單渲染邏輯,你可以通過(guò)將表單的循環(huán)保存在一個(gè)獨(dú)立的模板中,并覆蓋表單的 ?
template_name?屬性來(lái)使用自定義模板渲染表單,從而減少重復(fù)。下面的例子將導(dǎo)致 ?{{ form }}? 被渲染成 ?form_snippet.html? 模板的輸出。
在你的模板中:# In your template: {{ form }} # In form_snippet.html: {% for field in form %}{{ field.errors }} {{ field.label_tag }} {{ field }}{% endfor %}在你的表單中:
class MyForm(forms.Form): template_name = 'form_snippet.html' ...
分享文章:創(chuàng)新互聯(lián)Django4.0教程:Django4.0使用表單-使用表單模板
鏈接分享:http://www.5511xx.com/article/dpdcgpd.html - ?


咨詢
建站咨詢
