python框架Django中MTV框架之Template(模板/界面)
MTV框架之Template(模板/界面)
关注公众号“轻松学编程”了解更多。
1、模板目录位置
应用下
- 不需要注册
- 无法跨应用地进行复用
工程下
需要注册
settings.py范例
# django默认的模板配置
TEMPLATES = [
{
...,
# 模板路径
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
],
...
},
]
可以在不同应用中复用
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
- {% widthratio a b c %} //widthratio 是关键字
- 大小写转换
- {{ animal.a_name|lower }} //小写
- {{ animal.a_name|upper }} //大写
- 判断是否整除
- {% if forloop.counter|divisibleby:2 %} //如果循环变量的下标整除2
- 连接容器内元素
- {{ animals|join:’=’ }}
2.4 加载静态文件
{% load static %}
{% load staticfiles %}
#访问静态资源
<img src="{% static 'img/dragon.gif' %}">
<img src="/static/img/dragon.gif">
<img src="{% static imgName %}"> #imgName是一个变量,由视图层传过来
settings.py配置
静态文件夹位置
访问路由
-#静态文件访问路由
STATIC_URL = '/static/' #静态文件存储目录:根目录/static/
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
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
{% for animal in animals %}
<li>{{ animal.a_name }}</li>
{% empty %}
<h3>动物都跑啦</h3>
{% endfor %}
#当animals为空时,才会显示<h3>标签
for循环中使用变量:
{% for i in comments %}
<blockquote>
<p>{{ i.user.name }}:</p>
<p>{{ i.content }}</p>
<small><a href="{% url 'good' i.id book.id %}">点赞({{ i.good }})</a>
</small>
</blockquote>
{% 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关键字(包括标签,特殊字符等) 进行过滤替换.
过滤替换格式如下:
假设:content=<h1>hello world</h1>
转义
{% autoescape off %} {{ content }} {% endautoescape %}
关闭自动抑制——进行转义
浏览器输出一号标题hello world
{{ content|safe }}
确认数据是安全的——对数据进行转义
浏览器输出一号标题hello world
抑制
直接展示数据模式使用抑制(不转义)
{% autoescape on %} {{ content }} {% endautoescape %}
{{ content }}
浏览器直接输出:<h1>hello world</h1>
2.7 继承与兼并
{% extends ‘base_main.html’ %}
- 继承父模板
{% include xxx.html %}
- 兼并另一个模板使之成为页面的一部分
父模板
{% block header %}
{% endblock %}#重写父模板的当前块
{% block header %}
...
{% endblock %}
{{ block.super }}
- 引用父模板对当前块的实现
2.8 翻页框架
引入
样式
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/css/swiper.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/css/swiper.min.css">
脚本
<script src="https://cdn.bootcss.com/jquery/1.11.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.jquery.min.js"></script>
样式
<div class="swiper-container" id="topSwiper">
- 外层包裹,需要配合脚本使用
<div class="swiper-wrapper">
- 翻页包装器
<div class="swiper-slide">...</div>
- 分页内容1
<div class="swiper-slide">...</div>
- 分页内容2
如果需要分页器
<div class="swiper-pagination"></div>
如果需要导航按钮
<div class="swiper-button-prev"></div>
如果需要滚动条
<div class="swiper-scrollbar"></div>
脚本
$(function () {
var swiper = Swiper(".swiper-container",{});
})
例子:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<style type="text/css">
.swiper-container img {
height: 300px;
}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/css/swiper.min.css">
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.jquery.min.js"></script>
</head>
<body>
{# 轮播 #}
<div class="swiper-container" style=" text-align: center;">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="{% static 'img/c++.jpg' %}">
</div>
<div class="swiper-slide">
<img src="{% static 'img/python.jpg' %}">
</div>
<div class="swiper-slide">
<img src="{% static 'img/go.jpg' %}">
</div>
</div>
<!-- 如果需要分页器 -->
<div class="swiper-pagination"></div>
<!-- 如果需要导航按钮 -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- 如果需要滚动条 -->
<div class="swiper-scrollbar"></div>
</div>
<script>
$(function () {
var mySwiper = new Swiper(
'.swiper-container',
{
direction: 'horizontal',
loop: true,
// 如果需要分页器
pagination: '.swiper-pagination',
// 如果需要前进后退按钮
nextButton: '.swiper-button-next',
prevButton: '.swiper-button-prev',
// 如果需要滚动条
scrollbar: '.swiper-scrollbar',
}
)
})
</script>
</body>
</html>
效果图:
2,9 模板渲染过程
加载模板
- template = loader.get_template('Hello.html')
<class 'django.template.backends.django.Template'>
- 渲染模板
result = template.render()
<class 'django.utils.safestring.SafeText'>
result = template.render(context={"haha":"你哈什么哈"})
- 渲染时给模板传递数据
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号


关注我,我们一起成长~~
python框架Django中MTV框架之Template(模板/界面)的更多相关文章
- python框架Django中MTV框架之VIew(业务控制器)
MTV框架之VIew(业务控制器) 关注公众号"轻松学编程"了解更多. 1.什么是视图 视图层=路由表(urls.py)+视图函数(views.py) 其角色相当于MVC中的Con ...
- python框架Django中MTV之Model(数据模型)
MTV框架之Model(数据模型) 关注公众号"轻松学编程"了解更多. 1.连接MySQL数据库 项目中的settings.py设置范例 # 配置数据库 DATABASES = { ...
- 写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用
写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用 一.了解什么是DRF DRF: Django REST framework Django REST framew ...
- python框架Django中的MTV架构
MTV架构 关注公众号"轻松学编程"了解更多. 通过V对M和T进行连接,用户通过T(界面)对服务器进行访问(发送请求),T把请求传给V(调度),V调用M(数据模型)获取数据,把 ...
- python框架django中结合vue进行前后端分离
一:创建django项目 1.django-admin startproject mysite # 创建mysite项目 2.django-admin startapp app01# 创建app01应 ...
- 测试开发之Django——No4.Django中前端框架的配置与添加
我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...
- Python—在Django中使用Celery
一.Django中的请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下: http请求发起 经过中间件 http handling(request解析) ur ...
- python django中restful框架的使用
在使用django进行前后台分离开发时通常会搭配django-rest-framework框架创建RESTful风格的接口API.框架介绍及版本要求可参考官方地址:https://www.django ...
- 在python的web框架Django中使用SQL Server
在pycharm中安装 安装pyodbc和Django——pyodbc是一个用python写的ODBC引擎 安装Django-pyodbc-azure 在后方网址中查 ...
随机推荐
- 零基础学习Kmeans聚类算法的原理与实现过程
内容导入: 聚类是无监督学习的典型例子,聚类也能为企业运营中也发挥者巨大的作用,比如我们可以利用聚类对目标用户进行群体分类,把目标群体划分成几个具有明显特征区别的细分群体,从而可以在运营活动中为这些细 ...
- matlab中的qr函数
转自:https://blog.csdn.net/qq278672818/article/details/62038630 实数矩阵A的QR分解是把A分解为 A = QR 这里的Q是正交矩阵(意味着Q ...
- CPU 执行程序的秘密,藏在了这 15 张图里
前言 代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电 ...
- C#实例(经典):四路光电开关&激光雷达数据采集和波形图绘制
前言:本文全部纯手工打造,如有疏漏之处,还请谅解! 如果需要查看更多文章,请微信搜索公众号 csharp编程大全,需要进C#交流群群请加微信z438679770,备注进群, 我邀请你进群! ! ! 这 ...
- 使用css实现轮播图
使用css3实现图片轮播 前言:实现图片轮播的方式有很多种 ,例如js ,css 等等. 本文主要讲述使用纯css3实现轮播图 工具介绍: 使用的编辑器: Hbuilder 进入正题 html代码: ...
- git-代码分支管理
1. git代码分支管理 DEV SIT UAT PET PRE PRD PROD常见环境英文缩写含义 英文缩写 英文 中文 DEV development 开发 SIT System Int ...
- .net core中的那些常用的日志框架(NLog篇)
前言 咱们上回讲到,.net core中内置的Logging日志框架的使用,以及浅显的讲解,接下来,给大家介绍一个第三方日志框架(NLog). NLog简介 NLog是适用于各种.NET平台(包括.N ...
- 在nginx下导出数据库数据
首先上干货 解决问题 set_time_limit(0); //设置脚本运行时间为不限制 因为php脚本默认时间为30秒 ini_set('memory_limit', -1); //取消脚本运行内存 ...
- 17.JAVA-常用总结
for另一种写法 for(UserBean bean : list){ //for循环取出list中每个成员,并赋给bean变量 System.out.println(bean.getName()); ...
- Azure Cosmos DB (三) EF Core 操作CURD
一,引言 接着上一篇使用 EF Core 操作 Azure CosmosDB 生成种子数据,今天我们完成通过 EF Core 实现CRUD一系列功能.EF Core 3.0 提供了CosmosDB 数 ...