成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:7日期:2024-10-02 13:57:37

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

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

測(cè)試環(huán)境

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

# urls.py 文件,對(duì)應(yīng)關(guān)系 path(’email/’, views.email), # forms.py 文件from django.forms import Formfrom django.forms import fieldsfrom 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’})) # 其實(shí)生成標(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)簽里沒(méi)有,并且Form組件里貌似也沒(méi)有提供為label標(biāo)簽增加自定義屬性的方式。

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

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

自定義函數(shù)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# app名/templatetags/myfun.py 文件from django import templateregister = 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})

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

<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>

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

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

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

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())

渲染時(shí)添加屬性 class=’’(便于bootstrap)

from django.forms import widgets’’’在widgets.類(lèi)型(加入字典形式的標(biāo)簽信息)’’’class UserForm(forms.Form): # 模式:普通文本 標(biāo)簽加上: name = forms.CharField(widget=widgets.TextInput(attrs={’class’: ’form-control’})) # 模式:密碼模式 標(biāo)簽加上: pwd = forms.CharField(widget=widgets.PasswordInput( attrs={’class’: ’form-control’} ))

渲染自定義錯(cuò)誤提示

視圖

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’: ’格式錯(cuò)誤(提示方法)’}, # ’字段’: {’錯(cuò)誤類(lèi)型’: ’提示信息’} }) # 模式:invalid=格式錯(cuò)誤 pwd = forms.CharField(min_length=4, label=’密碼:’, error_messages={ ’title’: {’required’: ’不能為空哦親親’}, ’price’: {’invalid’: ’格式錯(cuò)誤(提示方法)’}, # ’字段’: {’錯(cuò)誤類(lèi)型’: ’提示信息’} })

HTML展示錯(cuò)誤信息

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

以上這篇django為Form生成的label標(biāo)簽添加class方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
青青草国产成人99久久| 精品国产乱码久久久久久久久| 欧美日韩国产一区精品一区| 在线视频亚洲| 久久久久综合一区二区三区| 欧美日韩精品高清| 国产精品久久久久久亚洲毛片| 久久国内精品自在自线400部| 国产精品一区二区视频| 亚洲欧洲www| 国产精品亚洲人在线观看| 91成人在线精品| 国产片一区二区| 久久激情久久| 久久精品人人做人人综合 | 日韩欧美国产一区在线观看| 美美哒免费高清在线观看视频一区二区| 欧美成人69| 久久精品一区二区三区不卡 | 一区二区三区欧美激情| 国产日本一区二区| 成人黄色综合网站| 一本久久精品一区二区| 亚洲一区二区三区四区在线免费观看| 99久久久国产精品| 久久亚洲私人国产精品va媚药| 老司机午夜精品| 国产亚洲精品v| 亚洲综合小说图片| 欧美久久99| 中文字幕亚洲综合久久菠萝蜜| 国产成人激情av| 日韩一区二区三区四区五区六区| 五月激情综合色| 久热re这里精品视频在线6| 亚洲天堂中文字幕| 亚洲美女色禁图| 中文av字幕一区| 午夜精品亚洲| 日韩三级视频中文字幕| 成人丝袜18视频在线观看| 欧美性猛交一区二区三区精品| 日韩国产在线一| 亚洲资源av| 亚洲裸体xxx| 香蕉久久夜色精品| 综合在线观看色| 国产日韩一区二区| 亚洲欧美日韩中文字幕一区二区三区| 一本色道久久综合| 亚洲色图欧洲色图婷婷| 欧美日韩喷水| 久久精品一区二区三区不卡 | 日韩毛片精品高清免费| 你懂的国产精品永久在线| 精品日韩欧美在线| 国产成人精品免费看| 欧美老女人在线| 美女网站视频久久| 亚洲欧美综合色| av日韩在线网站| 91麻豆精品91久久久久同性| 亚洲国产精品精华液网站| 在线一区欧美| 一区二区高清在线| 亚洲国产一区二区三区在线播| 国产精品三级久久久久三级| 牛牛国产精品| 国产日韩在线不卡| 欧美高清视频一区二区三区在线观看 | 99视频精品在线| 精品噜噜噜噜久久久久久久久试看| 国产中文一区二区三区| 欧美精品在线一区二区三区| 免费看日韩精品| 色噜噜久久综合| 日本不卡一区二区三区高清视频| 美女精品在线| 亚洲主播在线播放| 一区二区三区四区五区精品视频 | 色综合久久久久| 奇米影视在线99精品| 欧美亚洲综合网| 激情综合一区二区三区| 在线播放中文字幕一区| 国产白丝网站精品污在线入口| 3d动漫精品啪啪一区二区竹菊| 麻豆91免费看| 欧美日韩一区中文字幕| 国产精品中文欧美| 欧美成人三级在线| av一区二区三区在线| 久久久久成人黄色影片| 欧美三区美女| 亚洲男人的天堂在线观看| 亚洲一区二区三区免费观看| 日韩 欧美一区二区三区| 欧美色电影在线| 国产成人免费高清| 久久久久高清精品| 亚洲人成人一区二区三区| 亚洲国产综合色| 欧美日韩综合在线免费观看| 国产成人在线视频网站| 久久一留热品黄| 欧美婷婷久久| 一区二区三区四区av| av成人激情| 石原莉奈在线亚洲三区| 日本道色综合久久| 国产ts人妖一区二区| 国产日韩v精品一区二区| 一区在线视频观看| 日韩欧美电影在线| 欧美体内she精视频在线观看| 一区二区三区美女视频| 色婷婷精品大视频在线蜜桃视频| 九九精品视频在线看| 久久夜色精品国产噜噜av| 在线看无码的免费网站| 日韩精品久久理论片| 欧美精品久久99| 99在线视频精品| 亚洲免费视频中文字幕| 欧美视频在线一区二区三区| 丁香激情综合五月| 中文字幕av一区 二区| 亚洲欧美精品在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 久久亚洲精品小早川怜子| 亚洲精品一区二区三区樱花| 首页亚洲欧美制服丝腿| 日韩欧美一区二区免费| 亚洲国产一区二区三区高清| 久久er精品视频| 国产精品久久毛片a| 色偷偷久久人人79超碰人人澡| 国产精品一区二区久激情瑜伽| 国产精品全国免费观看高清| 色狠狠色噜噜噜综合网| eeuss鲁片一区二区三区| 亚洲精品乱码久久久久久| 日本久久电影网| 97精品电影院| 性做久久久久久久久| 日韩欧美色电影| 国产欧美不卡| 国产专区综合网| 综合久久久久综合| 欧美乱妇15p| 极品日韩久久| 蜜桃av噜噜一区| 亚洲精品在线观| 亚洲主播在线| 亚洲一区二区不卡免费| 欧美一级xxx| 亚洲国产精品一区二区第一页| 久久99精品一区二区三区| 国产精品网站导航| 欧美色倩网站大全免费| 在线成人欧美| 国产91清纯白嫩初高中在线观看 | 欧美va亚洲va在线观看蝴蝶网| 在线亚洲一区| 成人app网站| 首页国产丝袜综合| 国产精品三级av| 337p亚洲精品色噜噜噜| 一本不卡影院| 成人毛片老司机大片| 亚洲国产欧美日韩另类综合| 26uuu久久天堂性欧美| 日本电影欧美片| 99爱精品视频| 99精品欧美一区二区三区小说 | 亚洲国产电影在线观看| 欧美日韩一区二区在线观看 | 亚洲精品国产一区二区精华液 | 精品入口麻豆88视频| 日韩免费看的电影| 日韩免费性生活视频播放| 精品成人佐山爱一区二区| 欧美一级夜夜爽| 日韩三级视频中文字幕| 精品久久免费看| 26uuu国产电影一区二区| 久久影视一区二区| 亚洲国产精品二十页| 欧美激情在线看| 国产精品美女久久久久久久久 | 黑人巨大精品欧美黑白配亚洲| 国产一区欧美二区| 国产91高潮流白浆在线麻豆| 波多野结衣亚洲| 欧美日韩系列| 99视频精品| 色国产精品一区在线观看| 欧美日韩精品高清| 欧美成人在线直播| 国产亚洲短视频|