Django-自定义过滤器及标签

自定义过滤器及标签

如果我们在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 #迁移,数据库中对应出现数据表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值