最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django為Form生成的label標(biāo)簽添加class方式

 更新時間:2020年05月20日 14:32:24   作者:騎士救兵  
這篇文章主要介紹了django為Form生成的label標(biāo)簽添加class方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

使用Form生成html標(biāo)簽的時候,雖然提供了widget的方法可以自定義標(biāo)簽的要是,但是只能給生成的input標(biāo)簽添加樣式,對于生成的label標(biāo)簽無法添加樣式。

而很多場景下需要為label和input都添加class以實現(xiàn)自定義樣式。

測試環(huán)境

創(chuàng)建一個Form,通過Form幫我們生成HTML:

# urls.py 文件,對應(yīng)關(guān)系
 path('email/', views.email),
 
# forms.py 文件
from django.forms import Form
from django.forms import fields
from django.forms import widgets
 
class UserEmail(Form):
 username = fields.CharField()
 password = fields.CharField(
  widget=widgets.PasswordInput(attrs={'class': 'c1'})
 )
 email = fields.EmailField(
  widget=widgets.EmailInput(attrs={'class': 'c1'})
 )
 
# views.py 文件
def email(request):
 obj = forms.UserEmail()
 print(obj['email'].label_tag(attrs={'class': 'c1'})) # 其實生成標(biāo)簽的方法是提供attrs參數(shù)的
 return render(request, 'demo/email.html', {'obj': obj})

在html中,直接使用Form幫我生成的表單:

<body>
{{ obj.as_p }}
{{ obj.email.label_tag }}
{{ obj.email }}
</body>

這里可以看到,input標(biāo)簽里都是有class屬性的,但是lable標(biāo)簽里沒有,并且Form組件里貌似也沒有提供為label標(biāo)簽增加自定義屬性的方式。

通過模板語言的自定義函數(shù)實現(xiàn)

上面的views里的 print(obj['email'].label_tag(attrs={'class': 'c1'})) ,從輸出看,django提供的生成label標(biāo)簽的方法是支持attrs參數(shù)實現(xiàn)自定義屬性的,問題是在前端使用模板語言的時候只能這樣 {{ obj.email.label_tag }} 無法傳入?yún)?shù)。這里就自定義個模板語言的函數(shù)來解決這個問題。

自定義函數(shù)

要自定義函數(shù),按照下面的步驟操作:

在APP下,創(chuàng)建templatetags目錄,目錄名字很重要不能錯。

創(chuàng)建任意 .py 文件,這里文件名隨意,比如:myfun.py。

文件里創(chuàng)建一個template.Library()對象,名字是register。這里的對象名字必須是register。

然后寫自己的函數(shù),但是都用@register.simple_tag這個裝飾器裝飾好:

自定義的函數(shù)如下:

# app名/templatetags/myfun.py 文件
from django import template
register = template.Library()
 
@register.filter(is_safe=True)
def label_with_classes(value, arg):
 return value.label_tag(attrs={'class': arg})

然后在頁面中使用自定義的函數(shù):

<body>
{{ obj.as_p }}
{{ obj.email.label_tag }}
{{ obj.email }}
{% load myfun %}
{{ obj.email|label_with_classes:'c1 c2' }}
</body>

注意,上面的自定義函數(shù)引用的時候參數(shù)和參數(shù)之間一定不能有空格。

這里還有一個好處,把添加前端樣式的代碼放到了前端的html里實現(xiàn)了。

為input標(biāo)簽也寫一個自定義函數(shù)

django默認的方法是在Form里,通過widgets小部件添加attrs參數(shù)來實現(xiàn)標(biāo)簽的自定義樣式。這是在放在后端實現(xiàn)的。上面已經(jīng)實現(xiàn)了前端的自定義樣式,這里找了到生成input標(biāo)簽的方法,就是as_widget()。

照著樣子再寫一個子定義函數(shù):

# app名/templatetags/myfun.py 文件
from django import template
register = template.Library()
 
@register.filter()
def label_with_classes(value, arg):
 return value.label_tag(attrs={'class': arg})
 
@register.filter()
def widget_with_classes(value, arg):
 return value.as_widget(attrs={'class': arg})

最后,上面搞得難么麻煩,主要是為了可以前端一個for循環(huán),就能把表單按自定義的樣式顯示出來:

<body>
<link rel="stylesheet"  rel="external nofollow" 
  integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
{% load myfun %}
<form class="form-horizontal">
{% for item in obj %}
 <div class="form-group">
 {{ item|label_with_classes:'col-sm-2 control-label' }}
 <div class="col-sm-10">
  {{ item|widget_with_classes:'form-control' }}
 </div>
 </div>
{% endfor %}
</form>
</body>

補充知識:Django Forms組件 的參數(shù)配置案例 input樣式, 渲染的標(biāo)簽加class 錯誤信息提示

Forms渲染出標(biāo)簽類型

密碼型、文本型、郵箱型框

from django.forms import widgets

# 自定義格式方法
class UserForm(forms.Form):
 '''最小4位 且 模式:普通文本'''
 name = forms.CharField(min_length=4, label='姓名:',widget=widgets.TextInput()) 
 
 '''最小4位 且 模式:密碼模式'''
 pwd = forms.CharField(min_length=4, label='密碼:', widget=widgets.PasswordInput()) 

渲染時添加屬性 class=''(便于bootstrap)

from django.forms import widgets

'''在widgets.類型(加入字典形式的標(biāo)簽信息)'''

class UserForm(forms.Form):
 # 模式:普通文本 標(biāo)簽加上:class="form-control"
 name = forms.CharField(widget=widgets.TextInput(attrs={'class': 'form-control'})) 
 
 # 模式:密碼模式 標(biāo)簽加上:class="form-control"
 pwd = forms.CharField(widget=widgets.PasswordInput(
 attrs={'class': 'form-control'}
 )) 

渲染自定義錯誤提示

視圖

from django.forms import widgets
'''追加error_messages參數(shù) dict型式'''

class UserForm(forms.Form):

 # 模式:required=不能為空的提示
 name = forms.CharField(min_length=4, label='姓名:', 
    error_messages={
                     'title': {'required': '不能為空哦親親'},
          'price': {'invalid': '格式錯誤(提示方法)'},
          # '字段': {'錯誤類型': '提示信息'}
             }) 
 
 # 模式:invalid=格式錯誤
 pwd = forms.CharField(min_length=4, label='密碼:',
    error_messages={
                     'title': {'required': '不能為空哦親親'},
          'price': {'invalid': '格式錯誤(提示方法)'},
          # '字段': {'錯誤類型': '提示信息'}
             }) 

HTML展示錯誤信息

 <form action="" method="post" novalidate="novalidate"> 
 <!--要自定義提示必須 novalidate="novalidate"-->
 
   {% csrf_token %}
   {% for field in form %}
     <p>
       {{ field.label }}{{ field }} <span>{{ field.errors.0 }}</span>
       <!--錯誤信息固定:field.errors.0 -->
     </p>
   {% endfor %}
   <p><input type="submit" value="提交"></p>
 </form>

以上這篇django為Form生成的label標(biāo)簽添加class方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 教你用Type Hint提高Python程序開發(fā)效率

    教你用Type Hint提高Python程序開發(fā)效率

    本文通過介紹和實例教大家如何利用Type Hint來提升Python程序開發(fā)效率,對大家使用python開發(fā)很有幫助,有需要的參考學(xué)習(xí)。
    2016-08-08
  • 基于python實現(xiàn)檢索標(biāo)記敏感詞并輸出

    基于python實現(xiàn)檢索標(biāo)記敏感詞并輸出

    這篇文章主要介紹了基于python實現(xiàn)檢索敏感詞并輸出,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 詳解python里使用正則表達式的全匹配功能

    詳解python里使用正則表達式的全匹配功能

    這篇文章主要介紹了詳解python里使用正則表達式的全匹配功能的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • Python?defaultdict教程示例詳解

    Python?defaultdict教程示例詳解

    這篇文章主要為大家介紹了Python?defaultdict教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • python中threading和queue庫實現(xiàn)多線程編程

    python中threading和queue庫實現(xiàn)多線程編程

    這篇文章主要介紹了python中threading和queue庫實現(xiàn)多線程編程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python常見庫matplotlib學(xué)習(xí)筆記之畫圖文字的中文顯示

    Python常見庫matplotlib學(xué)習(xí)筆記之畫圖文字的中文顯示

    在Python中使用matplotlib或者plotnine模塊繪圖時,常常出現(xiàn)圖表中無法正常顯示中文的問題,下面這篇文章主要給大家介紹了關(guān)于Python常見庫matplotlib學(xué)習(xí)筆記之畫圖文字的中文顯示的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 使用python的Flask框架進行上傳和下載文件詳解

    使用python的Flask框架進行上傳和下載文件詳解

    這篇文章主要介紹了使用python的Flask框架進行上傳和下載文件詳解,Flask是一個使用Pyhton編寫的輕量級Web應(yīng)用框架,工具包采用Werkzeug,模板引擎則使用Jinja2,是目前十分流行的web框架,需要的朋友可以參考下
    2023-07-07
  • Python語言描述機器學(xué)習(xí)之Logistic回歸算法

    Python語言描述機器學(xué)習(xí)之Logistic回歸算法

    這篇文章主要介紹了Python語言描述機器學(xué)習(xí)之Logistic回歸算法,涉及Sigmoid函數(shù),梯度上升法等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Python根據(jù)服務(wù)獲取端口號的方法

    Python根據(jù)服務(wù)獲取端口號的方法

    這篇文章主要介紹了Python根據(jù)服務(wù)獲取端口號,文中給大家提到了linux查看端口開啟端口的方法,需要的朋友可以參考下
    2019-09-09
  • pandas pivot_table() 按日期分多列數(shù)據(jù)的方法

    pandas pivot_table() 按日期分多列數(shù)據(jù)的方法

    今天小編就為大家分享一篇pandas pivot_table() 按日期分多列數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論

大厂| 来宾市| 金门县| 梁山县| 定安县| 图木舒克市| 黄浦区| 伊宁县| 平潭县| 措美县| 建德市| 恩施市| 张家界市| 监利县| 太保市| 渝中区| 华容县| 西充县| 阳泉市| 广宁县| 宜章县| 苏尼特右旗| 吴桥县| 郸城县| 东乡族自治县| 伊吾县| 栾川县| 莆田市| 孝义市| 黑山县| 张家川| 大安市| 宜良县| 新平| 隆安县| 乡宁县| 丰原市| 英山县| 肇州县| 永胜县| 化州市|