模板语言循环
1:如果模板语言遇到列表,直接进行循环取值即可。
2:如果模板语言遇到字典进行循环有以下3种:
- for item in dict.keys 只循环获取字典key
- for item in dict.value 只循环获取字典value
- for k,v in dict.items 循环获取字典的key,value全部。
实例url:fordict # 字典for循环的取值方法
1 userlist = { 2 ‘1‘: {‘name‘: ‘jack‘, ‘age‘: 36}, 3 ‘2‘: {‘name‘: ‘anna‘, ‘age‘: 26}, 4 ‘3‘: {‘name‘: ‘vivi‘, ‘age‘: 16}, 5 } 6 def fordict(request): 7 return render(request,‘dict_for.html‘,{‘ulist‘:userlist})
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>循环字典</title> 6 </head> 7 <body> 8 <div> 9 {% for k in ulist.keys %} 10 <div>字典key:{{ k }}</div> 11 {% endfor %} 12 <hr /> 13 {% for v in ulist.values %} 14 <div>字典value:{{ v }}</div> 15 {% for k1,v1 in v.items %} 16 <div>字典k - v: {{ k1 }} -- {{ v1 }}</div> 17 {% endfor %} 18 {% endfor %} 19 <hr /> 20 {% for k,v in ulist.items %} 21 <div>字典k - v:{{ k }} - {{ v }}</div> 22 {% endfor %} 23 <hr /> 24 <hr /> 25 {% for k,v in ulist.items %} 26 {# <div><a href="/detail?nid={{ k }}">{{ v.name }}</a></div>#} 27 <div><a href="/detail-{{ k }}.html">{{ v.name }}</a></div> 28 {% endfor %} 29 </div> 30 </body> 31 </html>
HTML
实例url:detail # 查看详情
1 url写法 2 # url(r‘^detail‘,views.detail), 3 # url(r‘^detail-(\d+).html‘,views.detail), # 正则写法 4 url(r‘^detail-(?P<nid>\d+).html‘,views.detail), # 正则分组写法 5 6 视图函数 7 def detail(request,nid): 8 # nid = request.GET.get(‘nid‘) 9 curr_info = userlist[nid] 10 return render(request,‘detail.html‘,{‘detail_info‘:curr_info})
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>详细信息</title> 6 </head> 7 <body> 8 <form action="/index" method="post"> 9 <input type="text" name="user" placeholder="用户名" /> 10 <input type="text" name="email" placeholder="email" /> 11 <input type="submit" value="提交" /> 12 </form> 13 <ul> 14 {% for k,v in detail_info.items %} 15 <li>{{ k }} -- {{ v }}</li> 16 {% endfor %} 17 </ul> 18 </body> 19 </html>
HTML
3:模板继承(实例包含titil,css content,js)
实例:master.html 母版
1 {% block func %}{% endblock %} 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>{% block tital %}{% endblock %}</title> 7 <link rel="stylesheet" href="/static/commons.css" /> 8 {% block css %}{% endblock %} 9 </head> 10 <body> 11 12 <h1>母版继承</h1> 13 {% block content %}{% endblock %} 14 <script src="/static/jquery-1.12.4.min.js"></script> 15 {% block js %}{% endblock %} 16 </body> 17 </html>
母板
实例:slave.html 继承版
1 {% extends ‘master.html‘ %} 2 {% load func1 %} 3 {% block tital %}继承版{% endblock %} 4 {% block css %} 5 <style> 6 body{ background:#eeeeee} 7 </style> 8 {% endblock %} 9 {% block content %} 10 <h2>继承版本</h2> 11 {% include ‘tag.html‘ %} 12 {% include ‘tag.html‘ %} 13 {% include ‘tag.html‘ %} 14 {% include ‘tag.html‘ %} 15 {% count 20 40 %} 16 {% endblock %} 17 {% block js %} 18 <script>alert(‘js继承‘)</script> 19 {% endblock %}
继承版
注意:继承一个网页只能继承一个模板
4:模板导入
在html文件中使用:{% include ‘tag.html‘ %} 可以将tag.html网页内容导入到文件中。
5:自定义函数
simple_tag
1:在app下创建templatetags目录
2:在此目录下建立任意xxx.py文件
3:在py文件中注册simple_tag,以下为固定写法,不能修改
from django import template
register = template.Library() # 创建template对象,
@register.simple_tag
def func(a1,a2,a3..):
return "str..."
4:settings中注册app
5:在需要引入的html文件的顶部载入py文件,{% load xxx %}
6:html文件中使用:{% 函数名 arg1 arg2... %}
优点:支持多个参数传入
缺点:不能应用到条件判断中
filter
1:在app下创建templatetags目录
2:在此目录下建立任意xxx.py文件
3:在py文件中注册simple_tag,以下为固定写法,不能修改
from django import template
register = template.Library() # 创建template对象,
@register.filter
def func(a1,a2):
return "str..."
4:settings中注册app
5:在需要引入的html文件的顶部载入py文件,{% load xxx %}
6:html文件中使用:{{ arg1|函数名:arg2 }}
优点:可以应用在条件判断中 {% if "china"|cstr:‘beijing‘ %} {% endif %}
缺点:只支持2个参数传入,不能加空格
如:simple_tag 和 filter
1 from django import template 2 register = template.Library() 3 @register.simple_tag 4 def count(a1,a2,a3): 5 num = a1 + a2 + a3 6 return num 7 @register.filter 8 def cstr(a1,a2): 9 num = a1 + a2 10 return num 11 @register.filter 12 def power(a1): 13 return a1.upper()
html文件对应写法
1 {% load func1 %} # 导入py文件 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head></head> 5 <body> 6 {% count 10 20 %} # 对应simple_tag输出30 7 {{ "china"|cstr:‘beijing‘ }} # 对应filter输出chinabeijing 8 {{ ‘china‘|power }} #转换为大写 9 </body>