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 %} 导入模板 文件内容,代码复用