模板语法
1.使用 {{ x }} 映射变量
- 实例化字典,列表后通过 .(点) 来取值
<p>{{ l.4 }}</p>
<p>{{ d.name }}</p>
<p>{{ d.age }}-----》字典也可以根据句点符取值,一个点就搞定了。
然而在前端页面中是看不到你的模板语法的,当你点击审查元素的
时候,你就会发现,偷偷的换过来了</p>
- 实例化对象,也是通过点来取值
<p>{{ person_dada.name }}</p>
<p>{{ person_egon.age }}</p>
- 可以调用对象的无参数方法
def dream(self):
return "你有梦想吗?"
<p>{{ person_dada.dream }}</p> <!-- .方法的时候,注意当前的dream方法是没有参数的-->
<h4>字典:{{ dic.name.upper }}</h4>
- 可以重写对象类中的str方法将对象显示为字符串
def __str__(self):
return self.name+str(self.age)
2. 使用{% tag %}标签
- for标签(注:循环序号可以通过{{forloop}}显示)
<h3>循环取值1</h3><hr>
{% for item in person_list %}
<p>{{ item.name }},{{ item.age }}</p>
{% endfor %}
<h3>循环取值2:倒序</h3><hr>
{% for item in person_list reversed %}
<!--序号从1开始-->
<p>{{ forloop.counter }}----->{{ item.name }},{{ item.age }}</p>
<!--序号从0开始--><p>{{ forloop.counter0 }}----->{{ item.name }},{{ item.age }}</p><!-- 序号倒序 --><p>{{ forloop.revcounter }}----->{{ item.name }},{{ item.age }}</p>
{% endfor %}
<h3>循环取值3:字典</h3><hr>
{% for k,v in d.items %}
<p>{{ k }},{{ v}}</p>
{% endfor %}
3.自定义filter 和 simple_tag
过滤器: {{ var|filter_name:参数 }} # 参数只能是两个,一个参数是变量var ,一个是参数是后面的那个参数
标签: {% simple_tag 参数1 参数2 … %}
步骤
- 在app中创建templatetags模块(模块名只能是templatetags)
- 在templatetags里面创建任意 .py 文件,
my_tags.py
from django import template
from django.utils.safestring import mark_safe
register = template.Library() # register名字固定,不可改变
@register.filter # 过滤器,{{ var|filter_name:参数 }} 参数只能是两个,一个参数是变量var ,一个是参数是后面的那个参数
def multi(x,y):
return x*y # 自定义过滤器函数的参数只能两个,可以进行逻辑判断
@register.simple_tag # 标签 {% simple_tag 参数1 参数2 ... %}
def addtags(x,y,z):
return x+y+z # 自定义标签无参数限制,不能进行逻辑判断
@register.simple_tag # 标签
def my_input(id,arg):
result = "<input type='text' id='%s' class='%s' />" % (id, arg,)
return mark_safe(result)
html
引入tags
{% load my_tags %}
<h1>{{num}}</h1>
<h1>{{num|multi:12 }}</h1>
<h1>{{ num|multi:"[22,333,4444]" }} 相当于复制了,把[22,333,4444]乘了num遍</h1>
<h1>{% addtags 2 5 6 %} 参数不限,但不能放在if for语句中 {% addtags num 5 6 %}</h1>
<h1>自定义过滤器函数的参数只能两个,可以进行逻辑判断</h1>
<h3>
{% if num|multi:5 > 11 %}
<p>{{num}}乘以5大于11</p>
{% else %}
<p>{{num}}乘以5小于或等于11</p>
{% endif %}
</h3>
自定义过滤器函数的参数只能两个,可以进行逻辑判断
自定义标签无参数限制,不能进行逻辑判断
{% if i|multi:5 > 1000 %} <!-- 判断i*5>1000 -->
<p>大于{{ i }}</p>
{% else %}
<p>大于等于{{ i }}</p>
{% endif %}
4.模板继承
使用 extend 继承模板
{% extends "base.html" %} #必须是在文件的第一行
使用 block 创建盒子(在base.html中)
{% block classinfo %}
<h2>首页</h2>
<h2>学生信息</h2>
<h3>{{ class_id }}班</h3>
{% endblock%}
使用{{ block.super }} 继承base.html中的对应盒子内容
{{ block.super }}
使用 include 包含另一个页面
{% include "test.html" %} <!-- 用于包含test.html 页面-->
使用 load staticfiles 引入静态文件,如jquery等
{% load staticfiles %} <!-- 用于引入静态文件如 jquery等 -->