自定义过滤器及标签
如果我们在django项目中需要使用自己的过滤器,那我们需要做以下配置:
1.在全局文件夹下新建一个py包,包名可以任意。
2.在此py包下新建一个名为templatetags的py包(注意:此py包只可为这个固定名称)
3.我们需要在主项目文件的settings.py文件下的INSTALLED_APPS中进行注册
4.新建自定义过滤器的py文件即可
eg:
若我们新建了一个common的py包,在common包下新建了一个templatetags的py包。
我想使用自定义的过滤器,那么我需要在settings的INSTALLED_APPS中注册common
自定义过滤器的注册与使用
from django import template
#注意,此实例化对象名只能为register,若不一致则报错
register = template.Libray()
#注册此过滤器,若在filter方法内加参数,则过滤器名则为传入的字符串名,不传默认为函数名
#自定义过滤器
#自定义的过滤器用于模板变量,最多承载两个参数
@register.filter()
def Myadd(value,val):
return value+val
#自定义标签 没有参数限制
@register.simple_tag()
def My_Upper(*args):
data = []
for i in args:
data.append(i.upper())
return data
#自定义标题标签
@register.inclusion_tag('模板路径')
def Myinclusiontag():
return
#使用场景,在逻辑判断的情况下,我们需使用模板过滤器
{% if num|Myadd:10 == 100 %}
666
{% endif %}
自定义包含标签的页面传递
#1. 假设在Mytag.py文件中定义了一个Myinclusiontag的自定义包含标签返回demo1.html的模板
@register.inclusion_tag('common/demo1.html')
def Myinclusiontag():
li = [
{"name":'wxy','age':18},
{"name":'wwxy','age':28},
{"name":'wxxy','age':38},
{"name":'wxyy','age':48}
]
return {"li":li}
# demo1.html
<table>
{% for foo in li %}
<tr>
<td>{{ foo.name }}</td>
<td>{{ foo.age }}</td>
</tr>
{% endfor %}
</table>
#index.html 则index.html把demo1.html渲染了
{% Myincludetag %}
2. 假设在Mytag.py文件中定义了一个Myinclusiontag的自定义包含标签返回demo1.html的模板,在views视图函数中传入li2变量,要将li2的数据传入demo1.html中
# views
def index(request):
li2 = [
{"name":'wxy','age':18},
{"name":'wwxy','age':28},
{"name":'wxxy','age':38},
{"name":'wxyy','age':48}
]
return render(request,'appo3/index.html',locals())
#Mytags.py
@register.inclusion_tag('common/demo1.html')
def Myinclusiontag(li2):
return {"li":li2}
# demo1.html
<table>
{% for foo in li2 %}
<tr>
<td>{{ foo.name }}</td>
<td>{{ foo.age }}</td>
</tr>
{% endfor %}
</table>
#index.html 接收视图函数的li2数据传入Myinclusiontag函数中并渲染到demo1.html最后渲染到index.html
{% Myincludetag li2 %}
ORM模型
概念:对象关系映射
优势:不用直接编写SQL代码,只需要像操作对象一样从数据库操作数据
一个表就是一个类,一个字段就是一个属性
实现:
1.在主项目的settings.py 的DATABASES字段中注册 使用到数据库的项目文件必须注册在INSTALLED_APPS中
2.在settings中更改配置
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'Pro22',
'USER': 'root',
'PASSWORD':'wxy123',
'HOST':'127.0.0.1',
'PORT':3006
}
3.在虚拟机的环境中执行 pip install pymysql
4.在主项目的__init__.py文件中连接数据库,因为Django的默认驱动是Mysqldb,不会兼容python3以上的版本,所以要切换为pymysql的驱动
5.映射与迁移
makemigrations appname # 映射
migrate appname #迁移,数据库中对应出现数据表