• Django模版操作


    if、for

    语法结构

    1. {% if .... %}//if的开始标识,表达式满足python语法即可,但不支持含小括号的条件
    2. ...
    3. {% endif %}//结束标识
    4. {% for var in mylist %} //这里遍历的只要是python中的可遍历数据结构即可
    5. ...
    6. {% empty %}
    7. ... #如果为遍历目标空,则会执行这一区块内容
    8. {% endif %}//结束标识

    if练习

    Q:在模版中,完成四种基本运算的显示

    形如 input1_____   (operation) input2_____ =  result

    html模版代码

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <form action="/test_iffor" method="post">
    9. <input type="text" name="var1" value="{{ a }}">
    10. <label for="op">请选择操作:label>
    11. <select name='op' id="op">
    12. <option value="1" {% if op == '1' %}selected{% endif %}>+option>
    13. <option value="2" {% if op == '2' %}selected{% endif %}>-option>
    14. <option value="3" {% if op == '3' %}selected{% endif %}>*option>
    15. <option value="4" {% if op == '4' %}selected{% endif %}>/option>
    16. select>
    17. <input type="text" name="var2" value="{{ b }}">
    18. <input type="submit">
    19. <p>结果为{{ res }}p>
    20. form>
    21. body>
    22. html>

    代码解释

    1.我用了两个type为text的文本输入框,并将变量分别命名为var1和var2

    2.option中从1~4分别对应加减乘除,同时对应的op为对应的字符'1'到'4'

    3.在option标签中加入了if语句,用于保持当前选择与op相同,不会在表单提交后重置

    4.同样的,为了保持输入数据后不立马重置输入框,对输入框分别设置默认值为a和b

    (这也意味着等会视图函数传入变量名也应为a和b)

    视图函数

    1. def test_calculater(request):
    2. from django.shortcuts import render
    3. if request.method == 'GET':
    4. return render(request, 'calculater.html')
    5. elif request.method == 'POST':
    6. a = float(request.POST['var1'])
    7. b = float(request.POST['var2'])
    8. op = request.POST['op']
    9. if op == '1':
    10. res = a + b
    11. elif op == '2':
    12. res = a - b
    13. elif op == '3':
    14. res = a * b
    15. else:
    16. res = a / b
    17. # dict = {"a": a, "b": b, "res": res, "op": op}
    18. return render(request, 'calculater.html', locals()) # 这里等效于传入了dict
    19. # 配置路由如下
    20. path("test_iffor",views.test_calculater),
    21. # 接下来可以通过127.0.0.1:8000/test_iffor访问该页面

    运行效果

    for练习

    for循环中的内置变量forloop,其有如下属性

    示例代码

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <h1>这是测试for循环模版h1>
    9. {% for var in lis %}
    10. <p>{{ forloop }} {{ var }}p>
    11. {% empty %}
    12. 传入列表为空
    13. {% endfor %}
    14. <h1>我是分隔行h1>
    15. {% for var in non %}
    16. <p>{{ var }}p>
    17. {% empty %}
    18. 传入列表为空
    19. {% endfor %}
    20. body>
    21. html>
    1. # 视图函数及路由
    2. def test_for(request):
    3. if request.method == 'GET':
    4. dict = {'lis': ['alice', 'bob', 'brown']}
    5. return render(request, 'test_for.html', dict)
    6. path("test_for",view1.test_for)

    运行效果

    有了这个运行结果能够更清晰地理解内置变量forloop各种用法的作用


    模版中的过滤器

    对于safe:如果传入的字符串满足html语法,django会将其转义后作为纯文本显示在网页上

    如果在传入后加上safe过滤器,该字符串也能起到对应的html/css/js效果

    模版的继承

    1.创建一个base.html文件

    2.在可以被子模块修改的地方用↓包围起来

    {% block block_name %}

    {% endblock %}

    一旦该block_name在子模块中被重定义则按子模块显示,如无则按base.html显示

    3.创建子模块,删除初始化的html代码,取而代之只用写一行

    {% extends 'base.html' %}

    4.重写base.html中的各种块,名称一定要保持一致!

  • 相关阅读:
    windows环境下mongodb 5.0.9分片集群环境搭建
    矩阵距离——多源BFS
    图论04-【无权无向】-图的广度优先遍历
    发布管理工作流程介绍
    二、MyBatis 一二级缓存
    SCS【7】单细胞转录组之轨迹分析 (Monocle 3) 聚类、分类和计数细胞
    K8S常用kubectl命令汇总(持续更新中)
    SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.10 表现层标准开发
    Vue.js 框架源码与进阶 - Vue.js 3.0 Vite 实现原理
    Linux 进程切换与命令行参数
  • 原文地址:https://blog.csdn.net/G_yyyy/article/details/136139961