Django框架学习20--模板变量,模板标签,模板过滤器及自定义模板过滤器,自定义模板标签

1.模板变量

  • string 字符串和 int 类型,通过key名称直接取值,如:{{ n_name }}
  • list类型的取值,通过点下班取值,如:{{ fancy.0 }}、{{ fancy.1 }}、{{ fancy.2 }}
  • dict类型的,通过.keyname取值,如:{{ blog.url }}
  • 类的实例对象,属性通过点属性取值,如:{{ myblog.name}}
  • 类的方法,不带参数的方法,通过点方法取值,如:{{ myblog.fensi_number }
def  mobanbianliang(request):
    context = {
        "name": "呵呵哒",
        "n_name": "六中央",
        "age": 20,
        "fancy": ["python", "c++", "java"],
        "blog": {
            "url": "https://blog.csdn.net/lingxiyizhi_ljx/category_9514202.html",
        }
    }

    class Myblog():
        def __init__(self):
            self.name = "hello"
            self.age = 20

        def blog_number(self):
            return 100

        def fensi_number(self):
            return 1000

    myblog = Myblog()
    context["myblog"] = myblog

    return render(request, "mobanbianliang.html", context=context)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="referrer" content="no-referrer" />
    <title>Title</title>
</head>
<body>

<div>
<h1 class="display_name">{{ name }}</h1>

    <div>
    <p class="text_gray"><span>姓名: </span>{{ n_name }}</p>
    <p class="text_gray"><span>年龄:</span>{{ age }}</p>
    <p class="text_gray"><span>感兴趣的技术:</span>{{ fancy.0 }}、{{ fancy.1 }}、{{ fancy.2 }}</p>
    </div>

</div>
<h1 class="display_name">通过字典对象取值</h1>

<div>
    <p class="text_gray"><span>博客地址: </span>
    <a href="{{ blog.url }}"> {{ blog.url }} </a>
    </p>
    </div>

<h1 class="display_name">通过属性、方法取值</h1>
<p class="text_gray"><span>名称: </span>{{ myblog.name }}</p>
<p class="text_gray"><span>关注数: </span>{{ myblog.blog_number }}</p>
<p class="text_gray"><span>粉丝数:</span>{{ myblog.fensi_number }}</p>
</body>
</html>

2.模板标签

标签格式 {% tag %} ...标签 内容 ... {% endtag %}

for标签带有一个可选的{% empty %}从句,以便再给出的组是空的或者没有被找到时,给个默认值

def navlist(request):
    name_list = [
        {
            "type": "科普读物",
            "value": ["宇宙知识", "百科知识", "科学世界", "生物世界"]
        },
        {
            "type": "计算机/网络",
            "value": ["Java", "Python", "C语言"]
        },
        {
            "type": "建筑",
            "value": ["标准/规范", "室内设计", "建筑科学", "建筑文化"]
        },
        {
            'type':"LOL",
            'value':[]
        }
    ]

    context = {"name_list": name_list}

    return render(request, "2.html", context=context)
<body>
{% for name in name_list %}

<h1>
    <span>{{ name.type }}</span>
</h1>
{% for n in name.value %}
<span>
        {{ n }}{% if not forloop.last %} | {% endif %}
        </span>
{% empty %}
<span> 无标签 </span>
{% endfor %}


{% endfor %}

</body>

3.模板过滤器及自定义模板过滤器

模板过滤器就是对模板变量做进一步的操作

default 的功能是当 value 的值为空或None 的时候,输出过滤器默认的值

add 的功能是将 value 的值加一个值

irst 是输出列表中第一个,last 是输出列表中最后一个值,join是连接列表的值

safe 关闭html转义,告诉Django,这段代码是安全的,不用转义

def tem_filter(request):
    context = {
        'name': "",
        'age': 10,
        "class": ["python", "java", "c++"],
        "html_str": "<h2>这是一段html标签</h2>"
    }
    return render(request, "3.html", context=context)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <p class="text_gray"><span>姓名: </span>{{ name | default:"一剑光寒十九州" }}</p>
    <p class="text_gray"><span>年龄:</span>{{ age | add:"10" }}</p>
    <p class="text_gray"><span>第一门课程:</span>{{ class | first }}</p>
    <p class="text_gray"><span>最后一门课程:</span>{{ class | last }}</p>
    <p class="text_gray"><span>课程join:</span>{{ class | join:" | " }}</p>
    <p class="text_gray"><span>html标签:</span>{{ html_str }}</p>
    <p class="text_gray"><span>html标签safe:</span>{{ html_str | safe}}</p>
</div>

</body>
</html>

4.自定义filter

1.app下新建templatetags包

2.新建py文件编写代码

3.导入模板template,并且生成register变量

4.定义过滤器函数custom_filter.py,修改value值,并return返回,函数前加

@register.filter(name='my_filter')
#!usr/bin/python
# -*- coding: utf-8 -*-
from django import template
#register不能更换为别的变量名称,否则报TemplateSyntaxError错误
register = template.Library()


@register.filter(name='my_filter')
def my_custom_filter(value):
    return value + 1000

5.html中先加载过滤器py文件

{% load custom_filter %}

6.使用过滤器,过滤器是上边函数中装饰器name变量的值

{{ age | my_filter }}

5.自定义模板标签

自定义模板标签跟自定义过滤器步骤差不多

也在templatetags目录下新建my_tag.py

import time

from django import template

register = template.Library()


@register.simple_tag(name='mytag')
def custom_tag():
    timestr = time.strftime("%Y-%m-%d %H:%M:%S")
    return timestr
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% load custom_filter %}
{% load my_tag %}
<div>
    <p class="text_gray"><span>姓名: </span>{{ name | default:"一剑光寒十九州" }}</p>
    <p class="text_gray"><span>年龄:</span>{{ age | add:"10" }}</p>
    <p class="text_gray"><span>第一门课程:</span>{{ class | first }}</p>
    <p class="text_gray"><span>最后一门课程:</span>{{ class | last }}</p>
    <p class="text_gray"><span>课程join:</span>{{ class | join:" | " }}</p>
    <p class="text_gray"><span>html标签:</span>{{ html_str }}</p>
    <p class="text_gray"><span>html标签safe:</span>{{ html_str | safe}}</p>
    <p class="text_gray"><span>自定义过滤器</span>{{ age | my_filter }}</p>
    <p class="text_gray"><span>自定义标签</span>{% current_time %}</p>
</div>

</body>
</html>

django自带标签

  • {% for %} 变量输出变量的内容
  • {% if %} 对变量条件判断
  • {% csrf_token %} 生成 csrf_token值,用于防护跨站请求伪造攻击
  • {% url %} 引用路由配置地址,生成相应的url地址
  • {% with %} 将变量名重命名
  • {% load %} 导入django标签库
  • {% static %} 加载静态资源内容
  • {% extends xxx %} 模板继承
  • {% block xxx %} 重写父类模板的block内容
  • {% include xxx %} 导入模板 文件内容,代码复用

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值