发布网友 发布时间:2024-09-15 09:46
共1个回答
热心网友 时间:2024-10-20 13:04
导读:很多朋友问到关于django怎么重定义label标签的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
怎么添加label标签。工具栏里面有一个A字,单击它,然后用鼠标在窗体上拖曳就可以了
djangolistview怎么使用post方法
方法/步骤
一:编辑:forms.py
#coding=utf-8#指定编码,要不文件中出现的中文会报编码错误,因我代码中出现了中文
fromdjangoimportforms#从django中导入forms模块
classHostAddForm(forms.Form):#定义HostAddForm的类(forms.Form)是固定写法,照写就是了
ip=forms.IPAddressField(label='主机IP')#定义ip文本框,如效果图中的‘主机IP’,IPAddressField是说明IP字段,与models.py上定义的一致,label='主机IP',是定义label标签,如以下效果图
port=forms.CharField(max_length=5,label='端口')#定义端口文本框,长度最大为5
要设置哪个字段为可不写,lamp兄弟连用required=False,如cpumun=forms.CharField(max_length=50,required=False,label='CPU核数')
二:编辑view.py
defhostadd(request):#定义hostadd
ifrequest.method=="POST":#判断是否使用了POST方法
fr=HostAddForm(request.POST)#如果是使用了POST方法,即就绑定到fr变量,HostAddForm是forms.py上定义好的类字段,要一致
iffr.is_valid():#判断表单上传进来的数据是否有效,如有效就执行下面的语句
printfr.cleaned_data['ip']#这里是指可执行的代码,我这里仅仅是打印出这个IP地址而已,在写程序的时候,这里就可以替换成你要写的代码段了
returnHttpResponse("OK")#执行完毕后,返回成功字样
else:#如果不是使用POST方法,那么执行以下代码段
fr=HostAddForm()#定义HostAddForm()给变量fr,其实这里是空值来的,
returnrender_to_response('hostadd.html',locals())#最后把所有变量返回给模板hostadd.html,在hostadd.html上把这些表单显示出来
如果一个Form实体的数据是合法的,lampbrother它就会有一个可用的cleaned_data属性。这是一个包含干净的提交数据的字典,我们要报取数据的时候,就用这个,如上面代码中的printfr.cleaned_data['ip']
三:编辑模块文件hostadd.html
formaction=""method="post"
{{fr}}inputtype="submit"value="提交"
/form
{{fr}}标签会把所有的表单内容都显示出来,而且是用我们在forms.py上定义好的label标签,我们也可以不这样设置,在hostadd.html上自定义显示吧,如下
formaction=""method="post"
IP地址:{{fr.ip}}/br
IP端口:{{fr.port}}/br
inputtype="submit"value="提交"
/form
这里的fr.ipfr.port,ip,port跟上面forms.py上的字段名是对应的
如果要检测ip文本提交的数据是否合法,lamp兄弟连可以用{{fr.ip.errors}}来获取,如果不符合类型,会显示相应的提示:
4
四:编辑urls.py文件
(r'^hostadd.html$',hostadd),
效果:
5
提升:
给某个字段加上默认值,如我在IP字段上,写上默认为192.168.1.
fromdjangoimportforms
class
GAE上试用Django表单验证框架,如何更改表单对应字段的标签Django的表单验证框架可以从数据模型自动生成HTML表单,还可在与数据存储区交互的同时无缝处理通过表单输入的信息。要在GoogleAppEngine上使用DjangoForms,参考这篇文章在使用过程中会遇到一个问题,比如你在定义一个数据模型Book,有两个字段name和pub_date分别表示书名和出版日期。如果使用DjangoForms自动生成Book的输入表单,表单呈现大体如下:Name:PubDate:问题是想把PubDate显示为更有意义的中文出版日期,该如何实现?
研究半天Django官方文档中关于Forms的部分,一点头绪都没有,只能放狗了,在反复尝试了各种关键字组合后,搜索djangoforms.Modelform终于找到了
DjangoModelForm:addinganaliastoafield
,顺便收藏一下StackOverflow:acollaborativelyeditedquestionandanswersiteforprogrammers–regardlessofplatformorlanguage,好像很有专业的样子。
其中第一种解决办法是利用原生的Django的方法:
我是怎么做到使用django动态定义表单的fromdjango.utils.translationimportugettext_lazyas_
fromdjangoimportforms
fromdjango.forms.formsetsimportBaseFormSet
fromdjango.forms.fieldsimportFileField
fromdjango.forms.utilimportValidationError
fromdjango.shortcutsimportrender_to_response
fromdjango.contrib.formtools.wizardimportFormWizard
fromddtcms.office.equipment.modelsimportEquipment,Characteristic,CharacteristicValue
classEquipmentForm(forms.ModelForm):
classMeta:
model=Equipment
classCharacteristicValueForm(forms.Form):
defclean(self):
a=self.fields
s=self.data
self.cleaned_data={}
#下面的这一段for是从django的forms.py中的full_clean中复制来的
forname,fieldinself.fields.items():
#value_from_datadict()getsthedatafromthedatadictionaries.
#Eachwidgettypeknowshowtoretrieveitsowndata,becausesome
#widgetssplitdataoverseveralHTMLfields.
value=field.widget.value_from_datadict(self.data,self.files,self.add_prefix(name))
try:
ifisinstance(field,FileField):
initial=self.initial.get(name,field.initial)
value=field.clean(value,initial)
else:
value=field.clean(value)
self.cleaned_data[name]=value
ifhasattr(self,'clean_%s'%name):
value=getattr(self,'clean_%s'%name)()
self.cleaned_data[name]=value
exceptValidationError,e:
self._errors[name]=self.error_class(e.messages)
ifnameinself.cleaned_data:
delself.cleaned_data[name]
#cl=self.cleaned_data
#debug()调试用的,查看cl的值,主要是看self.cleaned_data的值,如果return了,就看不到了
returnself.cleaned_data
classEquipmentCreateWizard(FormWizard):
defdone(self,request,form_list):
returnrender_to_response('equipment/done.html',
{
'form_data':[form.cleaned_dataforforminform_list],
})
defget_form(self,step,data=None):
"HelpermethodthatreturnstheForminstanceforthegivenstep."
form=self.form_list[step](data,prefix=self.prefix_for_step(step),initial=self.initial.get(step,None))
ifstep==1:
ifdata:
cg=data.get('0-category',1)
cs=Characteristic.objects.all().filter(category__id=cg)
forcincs:
form.fields['Characteristic-'+str(c.id)]=forms.CharField(label=c.name)
g=form.fields
#debug()
returnform
#从wizard.py中复制过来进行更改的.
defrender(self,form,request,step,context=None):
"RendersthegivenFormobject,returninganHttpResponse."
old_data=request.POST
prev_fields=[]
ifold_data:
hidden=forms.HiddenInput()
#CollectalldatafrompreviousstepsandrenderitasHTMLhiddenfields.
foriinrange(step):
old_form=self.get_form(i,old_data)
hash_name='hash_%s'%i
prev_fields.extend([bf.as_hidden()forbfinold_form])
prev_fields.append(hidden.render(hash_name,old_data.get(hash_name,self.security_hash(request,old_form))))
ifstep==1:
cg=old_data.get('0-category',1)
cs=Characteristic.objects.all().filter(category__id=cg)
forcincs:
form.fields['Characteristic-'+str(c.id)]=forms.CharField(label=c.name)
g=form.fields
#debug()
ifstep==2:
debug()
returnsuper(EquipmentCreateWizard,self).render(form,request,step,context=None)
defget_template(self,step):
return'equipment/wizard_%s.html'%step
EquipmentCreateWizard其实也可以放在views.py中,而且我觉得更合理一点.
在EquipmentCreateWizard中,我试着修改过process_step函数,但是得不到正确的结果,后来修改了get_form,都是想从django的formtools的wizard.py中复制过来再进行修改的.
get_form的修改也没有得到正确的结果.后来就修改render函数,在第2步的时候,我将动态参数个数显示出来了.但是到最后结束done的环节,取得的formdata中,第二个form没有数据,就是一个空的{},
于是我又重新修改get_form函数,无非就是判断是不是第二步,然后给第二个form动态添加几个field:
1
2
3
4
5
6
7
ifstep==1:
cg=old_data.get('0-category',1)
cs=Characteristic.objects.all().filter(category__id=cg)
forcincs:
form.fields['Characteristic-'+str(c.id)]=forms.CharField(label=c.name)
g=form.fields
#debug()
这段代码在get_form和render中都有,都是判断是不是第2步,然后就根据第1步中选择的设备的分类来查询到具体的分类,再根据分类来获取该种分类的设备有哪些参数,然后根据参数个数修改form的参数field的个数.
'Characteristic-'+str(c.id)是用来以后保存数据的时候,split这个字符串,得到参数的id,并在参数值表中保存Characteristic-1,Characteristic-2...的value.
g=form.fields
#debug()
用来断点查看参数field有多少个,是否修改成功.
=========================
1
2
3
4
5
6
7
8
9
fromdjango.conf.urls.defaultsimport*
fromddtcms.office.equipment.formsimportEquipmentForm,CharacteristicValueForm,EquipmentCreateWizard
urlpatterns=patterns('ddtcms.office.equipment.views',
url(r'^$','index',name="equipment_index"),
url(r'^add/$','equipment_create',name="equipment_create"),
url(r'^add-by-wizard/$',EquipmentCreateWizard([EquipmentForm,CharacteristicValueForm]),name="equipment_create_by_wizard"),)
以上代码,csdnbolg自动过滤了$符号,我加了上去,可能有不对的地方.
==========================
wizard_0.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{%blockcontent%}
h2添加/修改设备向导/h2
p第{{step}}步,共{{step_count}}步./p
p填写设备基本情况/p
formmethod="POST"action=""{%csrf_token%}
table
{{form}}
/table
inputtype="hidden"name="{{step_field}}"value="{{step0}}"/
{{previous_fields|safe}}
inputtype="submit"value="Submit"/
/form
{%endblock%}
===================
wizard_1.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{%blockcontent%}
h2添加/修改设备向导/h2
p第{{step}}步,共{{step_count}}步./p
p填写设备参数,如果没有要填写的内容,请直接点击确定./p
formmethod="POST"action=""{%csrf_token%}
table
{{form}}
/table
inputtype="hidden"name="{{step_field}}"value="{{step0}}"/
{{previous_fields|safe}}
inputtype="submit"value="Submit"/
/form
{%endblock%}
====================
done.html
1
2
3
4
5
6
7
8
{%blockcontent%}
h2添加/修改设备向导/h2
p您已经成功添加了一个设备./p
{{form_data}}
{%endblock%}
============
还可以用另外的form来实现formwizard,就是第一个form1,主要用来让用户选择设备的分类,form2就根据前面的来动态生成参数的表单.原理是一样的.
还有就是写2个view来模拟formwizard,第一个view增加一个设备,第二个view带设备id这个参数即可,可以很有效的增加设备的参数.
如何更新Django的ManyToMany字段更新Django的ManyToMany字段:
1、在创建一个新的的时候:
p1=Post.objects.create(title=title,content=content,pub_date=pub_date,author=author)
p1.label.add(p)
其中label是ManyToMany字段。
2、更新的时候:
p1=Post.objects.filter(id=num).save(title=title,content=content,pub_date=pub_date,author=author)
3、如果此时误用update,则成了批量更新,会发生错误。
如何使用django-ckeditor添加自定义的plugins添加“插入代码”的按钮,起名为code。在ckeditor/plugins下新建文件夹code,在code文件夹里加入一个小图片如code.gif,然后在code文件夹里新建plugin.js文件,内容如下:
01CKEDITOR.plugins.add(
02"code",
03{
04requires:["dialog"],
05lang:["en"],
06init:function(a)
07{
08a.addCommand("code",newCKEDITOR.dialogCommand("code"));
09a.ui.addButton(
10"Code",
11{
12label:"插入代码",
13command:"code",
14icon:this.path+"code.gif"
15});
16CKEDITOR.dialog.add("code",this.path+"dialogs/code.js");
17}
18}
19);
3.修改config.js来注册code插件。用如下代码替换config.js原来内容:
01C