Python3之Django Web框架模板篇(templates)与自定义filter与tag

什么是模板:

html加模板语法

模板语法

变量:

形式:{{variable}}
深度查询:使用句点符号“.”
过滤器:{{variable|filter_name}}

过滤器:

default(没有值,或者标签找不到时显示默认):{{var|default:”啥也没有”}};
length(值的长度):{{var|length}};
filesizeformat(将值格式化为一个”人类可读的”文件尺寸 ):{{var|filesizeformat}},形如:

{{ ‘1234567’|filesizeformat }}


date(格式化时间):{{var|date:’Y-m-d’}},var不能是字符串!!!
slice(切片):{{var|slice:’2:-1’}};
truncatechars(截断字符):{{var|truncatechars:’20’}}
safe(告诉浏览器此段代码安全,无需转义):{{var|safe}}
{{ '<h6>hello geek!</h6>'|safe }}

标签

形式:{% tag %},tag包含:if、for、csrf_token、url

具体和特殊表现:
##for标签
#reversed反向遍历,如果需要获取循环序号则使用forloop
#如果查询的对象为空则会走到empty标签
{% for common in common_list  reversed%}
    <p>{{forloop}}===>{{ common }}</p>
{% empty %}
    <p>对不起,数据为空</p>
{% endfor %}
##if标签
#可以使用if标签进行逻辑判断,注意符号之间要用空格隔开
{% if a > 10 %}
    <p></p>
{% elif a < 10 %}
    <p></p>
{% else %}
    <p>一般</p>
{% endif %}
##with标签
#with标签可以起别名,两种形式:等号左右不能有空格!!!as比较好用
#形式一,输入with敲Tab键就能出来;
{% with common_list as  abc %}
    <p>{{ abc }}</p>
{% endwith %}
#形式二,手动输入;
{% with abc=common_list %}
    <p>{{ abc }}</p>
{% endwith %}
##csrf_token
#预防跨站攻击,个人觉得没啥卵用
{% csrf_token %}

列表解析:

common_list = [11, 22, 33]

<p><a href="">{{ common_list.0 }}</a></p>
<p><a href="">{{ common_list.1 }}</a></p>
<p><a href="">{{ common_list.2 }}</a></p>

{#列表解析#}
<p>
    <ul>
    {% for foo in common_list %}
        <li>{{ foo }}</li>
    {% endfor %}
    </ul>
</p>

对象解析:

    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
        #需要有return返回值
        def run(self):
            return '%s is running' % self.name
    Alex = People('alex', 18)

    <p>{{ Alex.name }}</p>
    #绑定方法要这么调用,不要加括号
    <p>{{ Alex.run }}</p>

自定义变量和标签

自定义步骤:

1.在settings.py中的INSTALLED_APPS注册应用;
2.在注册的应用中创建名为templatetags包,注意包名固定不能修改;
3.在templatetags中自定义一个py文件;
4.在该自定义的py文件中导入以下模块:
      >from django import template
      >from django.utils.safestring import mark_safe
      >register = template.Library()#register固定写法,不可改变
5.在该py文件中自定义函数完成需要实现的功能;
6.给该自定义函数添加装饰器,形如:@register.filter或者@register.simple_tag;
7.{% load 自定义py文件的名字%}
8.调用该自定义的filter或者tag

自定义filter和自定义tag区别:

自定义filter:
优点:可以与if标签连用
缺点:只能传一个参数,自定义时需要写两个形参
自定义tag:
优点:可以传多个参数,没有限制
缺点:不能与if标签连用

自定义过滤器和标签必须要有返回值

from django import template
from django.utils.safestring import mark_safe

# 名字必须为register
register = template.Library()


# 自定义过滤器
@register.filter
def format_str(a, b):
    return a + "=%=" + b


# 自定义标签
@register.simple_tag
def my_tag(a, b, c):
    return a * b * c


{% if '123'|format_str:'456' == '123=%=456' %}
    <p>Hello Geek!</p>
{% else %}
    <p>wtf</p>
{% endif %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值