1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Django框架学习20--模板变量 模板标签 模板过滤器及自定义模板过滤器 自定义模板标签

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

时间:2020-09-16 12:26:27

相关推荐

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": "/lingxiyizhi_ljx/category_9514202.html",}}class Myblog():def __init__(self):self.name = "hello"self.age = 20def blog_number(self):return 100def fensi_number(self):return 1000myblog = Myblog()context["myblog"] = myblogreturn 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 timefrom django import templateregister = 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 %} 导入模板 文件内容,代码复用

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。