| ID | 用户名 | 密码 |
|---|---|---|
| {{user.id}} | {{user.name}} | {{user.pwd}} |
直接写即可,不用body等标签
{% endblock%} {% block page-js %}{% endblock%} 用处:1,替换固定的模板内容 2,替换某个html专用css ,其实在子html中可直接加入cssdeng 但会造成css位置混乱,此方法可使css等都位于head标签 注意: 1,模板不能嵌套, 2,extends行一定在第一行, 路径必须加引号 3,可有多个block,一般3个 4,views中返回的是子html,不是base.html """ # 导入组件:就是替换 """ 将导航条放入单一功能模块 {% include "xxx.html" %} """ # 引入静态文件 """ 若static别名更改,引入的css等路径都要更改 解决方案: 路径拼接 {%load static%} 即可 """ # simpletag """ 复杂的filter 路径是实在app下templatags下 from... register... 注意register不能更改 @register.simple_tag(name="xx") 可不指定名字默认是函数名 def my_sum(arg1,arg2,arg3): return arg1+arg2+arg3 html使用 {%load xxx文件%} {% xx arg1 arg2 arg3 %} """ # inclusion_tag 返回html代码 """ 与simple类似 @register.inclusion_tag("xxx.html") 注意此处没有name ,调用使用函数名,向下12行 def my_inclusion(arg1): data = 处理参数args,变为其他数据,列表,字典等 return {"result":data} xxx.html
{{form_obj.name.label}}
{{form_obj.name}}
{{form_obj.name.errors.0}}
这种,只不过每个都要自己写
服务器端校验,通常是request中获取值,再返回,比较麻烦
django 校验后还可以保留信息
其他组件
单选按钮:forms.fields.ChoiceField(
choices=((1,"男"),(2,"女")),
label="性别",
initial=3,默认是3选中
widget = forms.widgets.RadioSelect
)
单选框,修改为widget = forms.widgets.Select 就是下拉菜单
多选框forms.MutipleChoiceField
initial=[1,3]
widget = forms.widgets.SelectMultiple 下拉菜单全部显示的那种
单选框,记住密码那种:forms.fields.ChoiceField
widget = forms.widgets.CheckboxInput
initial="checked"
多选框,
forms.fields.MultipleChoiceField(
choices=((1,"男"),(2,"女")),
label="爱好",
initial=[1,3],默认是3选中
widget = forms.widgets.CheckBoxSelectMultiple
)
"""
"""
自定义校验规则
from django.core.validators import RegexValidator
Charfield(
加上字段validators=[ 正则列表
RegexValidator(r"[0-9]+$","请输入数字"),
RegexValidator(r"^1[3-9][0-9]{9}$","159开头"),
]
)
在类中定义方法
def clean_name(self): 名字固定 clean_列名
value = self.cleanned_data.get("校验的列名 如name")
if "非法字符" in value:
raise ValidationError("含有非法字符")
return value
def clean(self): 重写父类clean方法,父类的方法默认什么都没干
pwd = self.cleaned_date.get("pwd")
...
if xx==yy
self.add_error("字段",ValidatorError("不一致") ) 应该在那里显示呢?
raise ValidatorError("不一致")
return self.cleaned_data
reg_pwd {{ form_obj.errors}}
"""
# =====================多选框从数据库取值
forms.CharField(
choices=models.xxx.objects.all().value_list("id",....)
#此时虽然可以获取,但是静态字段,若数据库增加,不重启服务器,新的数据不能获取
)
需要从写from的__init__方法
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields['那一列'].widget.choices=models......
内置字段:等待添加....
```
9_ 中间件
======