1、能传递到模板中的数据类型有:
2、在模板中使用上述变量的语法:
案例
urls.py
path('test_html_param',views.test_html_param),
views.py
def test_html_param(request):
dic = {}
dic['int'] = 88
dic['str'] = 'guoxiaomao'
dic['list'] = ['Tom', 'Jack', 'Lily']
dic['dict'] = {'a': 9, 'b': 8}
dic['func'] = say_hi # 注意传递函数不要加(),加上()相当于把函数的执行结果赋值给func
dic['class_obj'] = Dog()
return render(request, 'test_html_param.html',dic)
def say_hi():
return 'hahahaha'
class Dog:
def say(self):
return 'wangwang'
test_html_param.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>int 是 {{ int }}</h3>
<h3>str 是 {{ str }}</h3>
<h3>list 是 {{ list }}</h3>
<h3>list[0] 是 {{ list.0 }}</h3>
<h3>dict 是 {{ dict }}</h3>
<h3>dict['a'] 是 {{ dict.a }}</h3>
<h3>function 是 {{ func }}</h3>
<h3>class_obj 是 {{ class_obj.say }}</h3>
</body>
</html>
启动服务,浏览器输入:http://127.0.0.1:8000/test_html_param
作用:将一些服务器端的功能嵌入到模板中,例如流程控制等
标签语法:
{% 标签 %}
。。。
{% 结束标签 %}
语法:
{% if 条件表达式1 %}
...
{% elif 条件表达式2 %}
...
{% elif 条件表达式3 %}
...
{% else %}
...
{% endif %}
注意:
(1)if 条件表达式里可以用的运算符:== ,!=, <, >, <=, >=, in, not in, is, is not, not, and, or
(2)在if标记中使用实际括号是无效的语法。如果需要指示优先级,应使用嵌套的if标记。
官方文档:https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/#if
语法:
{% for 变量 in 可迭代对象 %}
... 循环语句
{% empty%}
... 可迭代对象无数据时填充的语句
{% endfor %}
for 标签的内置变量:
官方文档:https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/#for
其他标签可参考官网学习。
(1)if for标签案例
urls.py
path('test_if_for',views.test_if_for),
views.py
def test_if_for(request):
dic = {}
dic['x'] = 10
dic['lst'] = ['TOM', 'JACK', 'Lily']
return render(request, 'test_if_for.html', dic)
templates/test_if_for.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试if 和 fortitle>
head>
<body>
{% if x > 10 %}
今天天气很好
{% else %}
今天天气不好
{% endif %}
<br>
{% for name in lst %}
{% if forloop.first %} &&&&&& {% endif %}
<p> {{ forloop.counter }} {{ name }}p>
{% if forloop.last %} ====== {% endif %}
{% empty %}
当前无数据
{% endfor %}
body>
html>
浏览器输入:http://127.0.0.1:8000/test_if_for
(2)实现一个小计算器
通过if标签实现一个简单的计算器页面,如下:
urls.py
path('mycal',views.test_mycal),
views.py
def test_mycal(request):
if request.method == 'GET':
return render(request, 'mycal.html')
elif request.method == 'POST':
# 处理计算
x = int(request.POST['x'])
y = int(request.POST['y']) # 文本框传入的是字符串,需要int一下
op = request.POST['op']
result = 0
if op == 'add':
result = x + y
elif op == 'sub':
result = x - y
elif op == 'mul':
result = x * y
elif op == 'div':
result = x / y
return render(request, 'mycal.html', locals()) # locals() 将变量生成字典
templates/mycal.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算器title>
head>
<body>
<form action="/mycal" method="post">
<input type="text" name="x" value="{{ x }}">
<select name="op">
浏览器输入:http://127.0.0.1:8000/mycal 展示如案例描述。