MTV框架之Template(模板/界面)

关注公众号“轻松学编程”了解更多。

1、模板目录位置

  • 应用下

    • 不需要注册
    • 无法跨应用地进行复用
  • 工程下

    • 需要注册

      • settings.py范例

        1. # django默认的模板配置
        2. TEMPLATES = [
        3. {
        4. ...,
        5. # 模板路径
        6. 'DIRS': [
        7. os.path.join(BASE_DIR, 'templates'),
        8. ],
        9. ...
        10. },
        11. ]
    • 可以在不同应用中复用

1.1Django框架自带模板位置

2、模板语法

2.1 读取数据
  • {{ xxx }}
  • {{ xxx.attr }}
  • {{ xxx.method }}
  • {{ xxx.i }}
  • {{ xxx.key }}
2.2 注释
  • {# 模板注释是不可见的 (在html页面中是看不到的) #}
  • {% comment %}…{% endcomment %}
  • 注释多行内容
2.3 模板内计算
  • 加减

    • {{ value|add:10 }} //value加10
    • {{ value|add:-10 }} //value减10
  • 乘除
    • {% widthratio a b c %} //widthratio 是关键字

      • a/b*c
  • 大小写转换
    • {{ animal.a_name|lower }} //小写
    • {{ animal.a_name|upper }} //大写
  • 判断是否整除
    • {% if forloop.counter|divisibleby:2 %} //如果循环变量的下标整除2
  • 连接容器内元素
    • {{ animals|join:’=’ }}
2.4 加载静态文件
  • {% load static %}

  • {% load staticfiles %}

    1. #访问静态资源
    2. <img src="{% static 'img/dragon.gif' %}">
    3. <img src="/static/img/dragon.gif">
    4. <img src="{% static imgName %}"> #imgName是一个变量,由视图层传过来
  • settings.py配置

    • 静态文件夹位置

    • 访问路由

    1. -#静态文件访问路由
    2. STATIC_URL = '/static/'
    3. #静态文件存储目录:根目录/static/
    4. STATICFILES_DIRS = [
    5. os.path.join(BASE_DIR, 'static'),
    6. ]
2.5 流程控制
  • 遍历

    • {% if forloop.first %} //如果第一个循环变量为真

    • {% if forloop.last %} //如果最后一个循环变量为真

    • {{ forloop.counter0 }}

      • 正序下标,索引从0开始
    • {{ forloop.counter }}

      • 正序下标,索引从1开始算
    • {{ forloop.revcounter }}

      • 索引从最大长度到1
    • forloop.revcounter0

      • 索引从最大长度到0
    • forloop.parentloop

      • 获取上一层 for 循环的 forloop
    • {% empty %}

      • 当列表为空时用 for empty

        1. {% for animal in animals %}
        2. <li>{{ animal.a_name }}</li>
        3. {% empty %}
        4. <h3>动物都跑啦</h3>
        5. {% endfor %}
        6. #当animals为空时,才会显示<h3>标签

for循环中使用变量:

  1. {% for i in comments %}
  2. <blockquote>
  3. <p>{{ i.user.name }}:</p>
  4. <p>{{ i.content }}</p>
  5. <small><a href="{% url 'good' i.id book.id %}">点赞({{ i.good }})</a>
  6. </small>
  7. </blockquote>
  8. {% endfor %}
  • if条件

    • {% if forloop.first %}…{% elif forloop.last %}…{% else %}…{% endif %}
    • {% ifequal value1 value2 %}…{% else %}…{% endifequal %}
      • 如果value1==value2
    • {% ifnotequal value1 value2 %}…{% else %}…{% endifnotequal %}
      • 如果value1!=value2
2.6 转义开关

html转义就是将 html关键字(包括标签,特殊字符等) 进行过滤替换.

过滤替换格式如下:

  1. 假设:content=<h1>hello world</h1>
  • 转义

    • {% autoescape off %} {{ content }} {% endautoescape %}

        1. 关闭自动抑制——进行转义
        2. 浏览器输出一号标题hello world
    • {{ content|safe }}

        1. 确认数据是安全的——对数据进行转义
        2. 浏览器输出一号标题hello world
  • 抑制

    1. 直接展示数据模式使用抑制(不转义)
    • {% autoescape on %} {{ content }} {% endautoescape %}

    • {{ content }}

        1. 浏览器直接输出:<h1>hello world</h1>
    2.7 继承与兼并
    • {% extends ‘base_main.html’ %}

      • 继承父模板
    • {% include xxx.html %}

      • 兼并另一个模板使之成为页面的一部分
    • 父模板

    {% block header %}
    {% endblock %}

    1. #重写父模板的当前块
    2. {% block header %}
    3. ...
    4. {% endblock %}
    • {{ block.super }}

      • 引用父模板对当前块的实现
2.8 翻页框架
  • 引入

    • 样式

        1. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/css/swiper.css">
        2. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/css/swiper.min.css">
    • 脚本

        1. <script src="https://cdn.bootcss.com/jquery/1.11.1/jquery.js"></script>
        2. <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.js"></script>
        3. <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.jquery.js"></script>
        4. <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.min.js"></script>
        5. <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.jquery.min.js"></script>
  • 样式

      1. <div class="swiper-container" id="topSwiper">
      • 外层包裹,需要配合脚本使用
      1. <div class="swiper-wrapper">
      • 翻页包装器
      1. <div class="swiper-slide">...</div>
      • 分页内容1
      1. <div class="swiper-slide">...</div>
      • 分页内容2
    • 如果需要分页器

        1. <div class="swiper-pagination"></div>
    • 如果需要导航按钮

        1. <div class="swiper-button-prev"></div>
    • 如果需要滚动条

        1. <div class="swiper-scrollbar"></div>
  • 脚本

    1. $(function () {
    2. var swiper = Swiper(".swiper-container",{});
    3. })

例子:

  1. {% load static %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>{{ title }}</title>
  7. <style type="text/css">
  8. .swiper-container img {
  9. height: 300px;
  10. }
  11. </style>
  12. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/css/swiper.min.css">
  13. <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
  14. <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.min.js"></script>
  15. <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.jquery.min.js"></script>
  16. </head>
  17. <body>
  18. {# 轮播 #}
  19. <div class="swiper-container" style=" text-align: center;">
  20. <div class="swiper-wrapper">
  21. <div class="swiper-slide">
  22. <img src="{% static 'img/c++.jpg' %}">
  23. </div>
  24. <div class="swiper-slide">
  25. <img src="{% static 'img/python.jpg' %}">
  26. </div>
  27. <div class="swiper-slide">
  28. <img src="{% static 'img/go.jpg' %}">
  29. </div>
  30. </div>
  31. <!-- 如果需要分页器 -->
  32. <div class="swiper-pagination"></div>
  33. <!-- 如果需要导航按钮 -->
  34. <div class="swiper-button-prev"></div>
  35. <div class="swiper-button-next"></div>
  36. <!-- 如果需要滚动条 -->
  37. <div class="swiper-scrollbar"></div>
  38. </div>
  39. <script>
  40. $(function () {
  41. var mySwiper = new Swiper(
  42. '.swiper-container',
  43. {
  44. direction: 'horizontal',
  45. loop: true,
  46. // 如果需要分页器
  47. pagination: '.swiper-pagination',
  48. // 如果需要前进后退按钮
  49. nextButton: '.swiper-button-next',
  50. prevButton: '.swiper-button-prev',
  51. // 如果需要滚动条
  52. scrollbar: '.swiper-scrollbar',
  53. }
  54. )
  55. })
  56. </script>
  57. </body>
  58. </html>

效果图:

2,9 模板渲染过程
  1. 加载模板
  2. - template = loader.get_template('Hello.html')
  3. <class 'django.template.backends.django.Template'>
  4. - 渲染模板
  5. result = template.render()
  6. <class 'django.utils.safestring.SafeText'>
  7. result = template.render(context={"haha":"你哈什么哈"})
  8. - 渲染时给模板传递数据

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

python框架Django中MTV框架之Template(模板/界面)的更多相关文章

  1. python框架Django中MTV框架之VIew(业务控制器)

    MTV框架之VIew(业务控制器) 关注公众号"轻松学编程"了解更多. 1.什么是视图 视图层=路由表(urls.py)+视图函数(views.py) 其角色相当于MVC中的Con ...

  2. python框架Django中MTV之Model(数据模型)

    MTV框架之Model(数据模型) 关注公众号"轻松学编程"了解更多. 1.连接MySQL数据库 项目中的settings.py设置范例 # 配置数据库 DATABASES = { ...

  3. 写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用

    写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用 一.了解什么是DRF DRF: Django REST framework Django REST framew ...

  4. python框架Django中的MTV架构

    MTV架构 关注公众号"轻松学编程"了解更多. ​ 通过V对M和T进行连接,用户通过T(界面)对服务器进行访问(发送请求),T把请求传给V(调度),V调用M(数据模型)获取数据,把 ...

  5. python框架django中结合vue进行前后端分离

    一:创建django项目 1.django-admin startproject mysite # 创建mysite项目 2.django-admin startapp app01# 创建app01应 ...

  6. 测试开发之Django——No4.Django中前端框架的配置与添加

    我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...

  7. Python—在Django中使用Celery

    一.Django中的请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下: http请求发起 经过中间件 http handling(request解析) ur ...

  8. python django中restful框架的使用

    在使用django进行前后台分离开发时通常会搭配django-rest-framework框架创建RESTful风格的接口API.框架介绍及版本要求可参考官方地址:https://www.django ...

  9. 在python的web框架Django中使用SQL Server

    在pycharm中安装 安装pyodbc和Django——pyodbc是一个用python写的ODBC引擎 安装Django-pyodbc-azure                  在后方网址中查 ...

随机推荐

  1. Python-鸡兔同笼问题

    鸡兔同笼问题 -- 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? --鸡和兔在一个笼子里,从上面数,有35个头:从下面数,有94只脚.问笼中各有几只鸡和兔 如何逻辑整理? -- 鸡头和兔子 ...

  2. 剑指offer-链表&数组

    1.圆圈中最后剩下的数 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...

  3. 手把手撸套框架-Victory框架1.1 详解

    目录 上一篇博客 Victory框架1.0 详解  有说道,1.0的使用过程中出现不少缺点,比如菜单不能折叠,权限没有权限组等等. 所以,我还是抽出时间在下班后,回到我的小黑屋里 完成了1.1的升级. ...

  4. DOS批处理中%cd%与%~dp0的区别详解

    转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解     Windows下批处理中%cd%和%~dp0都能用来表示当前 ...

  5. Mac安装mongodb并启动

    1.选择自己版本下载,下载完成后进入Finder看下usr文件夹下是否有mongodb2.默认情况下是看不到需要我们输入指令:shift + command +G 输入 /usr/local 进入文件 ...

  6. Apple uses Multipath TCP

    http://blog.multipath-tcp.org/blog/html/2018/12/15/apple_and_multipath_tcp.html December 15, 2018 Ap ...

  7. java高级&资深&专家面试题-行走江湖必备-持续更新ing

    行走江湖必备一份面试题,这里给大家整理了一套.0面试官最喜欢问的问题或者出场率较高的面试题,助校招或者社招路上的你一臂之力! 首先我们需要明白一个事实,招聘的一个很关键的因素是在给自己找未来的同事,同 ...

  8. day39 Pyhton 并发编程02 后

    一.开启子进程的另一种方式 import os from multiprocessing import Process class MyProcess(Process): def __init__(s ...

  9. Spark核心组件通识概览

    在说Spark之前,笔者在这里向对Spark感兴趣的小伙伴们建议,想要了解.学习.使用好Spark,Spark的官网是一个很好的工具,几乎能满足你大部分需求.同时,建议学习一下scala语言,主要基于 ...

  10. spring boot:基于profile的多环境配置(spring boot 2.3.4)

    一,为什么要进行多环境配置? 1,没有人会在生产环境中进行开发和测试, 所以通常会有多个环境的划分: 工程师本地的开发环境 进行测试的测试环境 最终上线的生产环境 每个环境对应不同的数据库/缓存等数据 ...