s14_03_模板语言
模板语言
- 特殊的模板语言
# {{ 变量名 }}
# view.py
def func(request):
return render(request, "index.html", {'current_user': "alex"})
# index.html
<html>
<body>
<div>{{current_user}}</div>
</body>
</html>
#最后生成的字符串
<html>
<body>
<div>alex</div>
</body>
</html>
- For循环:
def func(request):
return render(request, "index.html",{、
current_user': "alex",
'user_list': ['alex','eric']})
# index.html
<div>{{current_user}}</div>
<ul>
{% for row in user_list %}
{% if row == "alex" %}
<li>{{ row }}</li>
{% endif %}
{% endfor %}
</ul>
- 索引
def func(request):
return render(request, "index.html", {
'current_user': "alex",
'user_list': ['alex','eric'],
'user_dict': {'k1': 'v1', 'k2': 'v2'}})
# index.html
<div>{{current_user}}</div>
<a> {{ user_list.1 }} </a>
<a> {{ user_dict.k1 }} </a>
<a> {{ user_dict.k2 }} </a>
- 条件:
def func(request):
return render(request, "index.html", {
'current_user': "alex",
"age": 18,
'user_list': ['alex','eric'],
'user_dict': {'k1': 'v1', 'k2': 'v2'}})
# index.html
<div>{{current_user}}</div>
<a> {{ user_list.1 }} </a>
<a> {{ user_dict.k1 }} </a>
<a> {{ user_dict.k2 }} </a>
{% if age %}
<a>有年龄</a>
{% if age > 16 %}
<a>老男人</a>
{% else %}
<a>小鲜肉</a>
{% endif %}
{% else %}
<a>无年龄</a>
{% endif %}
- 字典循环
# USER_DICT = {
# 'k1':'root1',
# 'k2':'root2',
# 'k3':'root3',
# 'k4':'root4',
# }
{{ user_dict.k1 }}
<ul>
{% for k in user_dict.keys %}
<li>{{ k }}</li>
{% endfor %}
</ul>
<ul>
{% for val in user_dict.values %}
<li>{{ val }}</li>
{% endfor %}
</ul>
<ul>
{% for k,row in user_dict.items %}
<li>{{ k }}-{{ row }}</li>
{% endfor %}
</ul>
- 再举例
render(request, "模板的文件的路径",
{'obj': 1234,
'k1': [1,2,3,4],
"k2": {'name': '张扬','age': 73}})
<h1> {{ obj }} </h1>
<h1> {{ k1.3 }} </h1>
<h1> {{ k2.name }} </h1>
{% for i in k1 %}
<p> {{ i }} </p>
{% endfor %}
{% for row in k2.keys %}
{{ row }}
{% endfor %}
{% for row in k2.values %}
{{ row }}
{% endfor %}
{% for k,v in k2.items %}
{{ k }} - {{v}}
{% endfor %}
- 模板继承extends
- 模板master中,变化部分用标记占位
{% block content %}
{% endblock %}
{% block title %}
{% endblock %}
- 子板中顶部先声明引用,只写block的内容
{% extends 'master.html' %}
{% block title %}标题{% endblock %}
{% block content %}
“子板内容”
{% endblock %}
- 子板css
在 模板<stytle></stytle> 下方进行单独block
{% block css %} {% endblock %}
- 子板JS
在 模板<script></script> 下方进行单独block
{% block js %} {% endblock %}
# 子板中block顺序随意
# 一个子板只能有一个模板
- 模板导入include
- 定义tag.htm(放在templates)
- 使用处
{% include 'tag.html' %}
# tag.html 如有模板语言,django回渲染
# 一个页面可以有多个tag
- 内置函数
{{ item.event_start|date:"Y-m-d H:i:s"}}
{{ bio|truncatewords:"30" }}
{{ my_list|first|upper }}
{{ name|lower }}
- 自定义函数
simple_tag
a. app下创建templatetags目录
b. 任意xxoo.py文件
c. 创建template对象 register
d.
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.simple_tag
def func(a1,a2,a3....)
return " a1 + a2"
e. settings中注册APP
f. 顶部 {% load xxoo %}
g. {% 函数名 arg1 arg2 %}
# 不能作为if条件
# 参数任意
filter
a. app下创建templatetags目录
b. 任意xxoo.py文件
c. 创建template对象 register
d.
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter
def func(a1,a2)
return "asdfasd"
e. settings中注册APP
f. 顶部 {% load xxoo %}, 若有extend,则extend 在最上面
g. {{ 参数1|函数名:"参数二,参数三" }} {{ '参数1'|函数名:'数字' }}
# 能作为if条件
# 最多两个参数,不能加空格