5-Django模板层变量和标签

一、变量

1、能传递到模板中的数据类型有:

  • str – 字符串
  • int – 整型
  • list – 数组
  • tuple – 元组
  • dict – 字典
  • func – 方法
  • obj – 类实例化的对象

2、在模板中使用上述变量的语法:

  • {{变量名}}
  • {{变量名.index}}
  • {{变量名.key}}
  • {{对象.方法}}
  • {{函数名}}

案例
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
5-Django模板层变量和标签_第1张图片

二、模板标签

作用:将一些服务器端的功能嵌入到模板中,例如流程控制等
标签语法

{% 标签 %}
。。。
{% 结束标签 %}
1、 if标签

语法:

{% 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

2、for标签

语法:

{% for 变量 in 可迭代对象 %}
... 循环语句
{% empty%}
... 可迭代对象无数据时填充的语句
{% endfor %}

for 标签的内置变量:
5-Django模板层变量和标签_第2张图片
官方文档:https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/#for
其他标签可参考官网学习。

3、 案例

(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
5-Django模板层变量和标签_第3张图片
(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 展示如案例描述。

你可能感兴趣的:(Django,django,python,后端)