django的模版
django的模版
1模版语法
views.py 书写方式
def index(request):
'''
模版语法分:
变量: {{ }}
1. 深度查询 句点符
2. 过滤器 {{val|filter_name:参数}}
标签: {% %}
'''
name = "augustyang"
test_list = [11,22,33,44]
class people:
def __init__(self,name,age):
self.name = name
self.age = age
p1 = people("yy",18)
p2 = people("ss",28)
people_list = [p1,p2]
# return render(request, "index.html",{"name":name})
return render(request, "index.html",locals())

'''
用到的知识有:
引用方式:
{"name":name} 指定引用
locals() 相当于全部引用 render(request, "index.html",{"name":name,"p1":p1}) index.html 文件 调用方式 1. 深度查询 句点符 <p> {{ name }}</p>
<p> {{ p1 }}</p>
<p> {{ p1.name }}</p>
<p> {{ test_list.1 }}</p>
<p> {{ people_list.1.name }}</p> '''
index.html 书写方式
<p> {{ name }}</p>
<p> {{ p1 }}</p>
<p> {{ p1.name }}</p>
<p> {{ test_list.1 }}</p>
<p> {{ people_list.1.name }}</p>
2过滤器
views.py 书写方式
def index(request):
ysl = 22# 过滤器
import datetime
now = datetime.datetime.now()
file_size = 12343242123123 content = "南京出台人才购房新政,全市所有在售房源向海内外人才全开放,并为人才购房开辟优先通道,该政策将于2020年1月1日起施行。据中新经纬客户端不完全统计" link = "<a href=''>click</a>" return render(request, "index.html",locals())
index.html 书写方式
<!-- 过滤器 -->
<h2>过滤器</h2> <!-- date -->
<p>{{ now|date:"Y-m-d " }}</p> <!-- length 返回列表和字符串长度-->
<p>{{ test_list|length }}</p> <!-- filesizeformat 11.2 TB-->
<p>{{ file_size|filesizeformat }}</p> <!-- default 为空使用默认值 否则使用变量值-->
<p>{{ ysl|default:"没有这个值" }}</p> <!-- default 为空使用默认值 否则使用变量值-->
<p>{{ link|safe }}</p> <!-- 要截断的字符数 -->
<p>{{ content|truncatechars:10 }}</p>

3标签
标签 有for循环 if 循环 with as 重命名
①for标签
{% for foo in test_list %}
<p>{{ foo }}</p>
{% endfor test_list%}
{% for foo in people_list %}
<p>{{ foo.name }}</p>
{% endfor people_list %}
<!-- 字典遍历-->
{% for key,val in dic.items %}
<p>{{ key }}:{{ val }}</p>
{% endfor %}
{% for key in dic %}
<p>{{ key }}</p>
{% endfor %}
{% for people in people_list %}
<p>{{ people }}</p>
{% endfor %}
②if 标签
{% if user %}
<p>
<a href="">hi {{ user }}</a>
<a href="">注销</a>
</p>
{% else %}
<p>
<a href=" ">登录</a>
<a href=" ">注册</a>
</p>
{% endif %}
③with标签
{% with people_list.1.name as n %}
<p>{{ n }}</p>
<p>{{ n }}</p>
{% endwith %}
④ csrf_token
在form表单点击提交按钮后,会出现Forbidden:CSRF verification failed. Request aborted,解决方法两种
方法一:在settings.py中注释掉 'django.middleware.csrf.CsrfViewMiddleware',
方法二:在form表单中 添加这个模板语言
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="">
name: <input type="text" name="user" >
<input type="submit" name="">
{% csrf_token %}
</form>
</body>
</html>
4自定义标签和过滤器
前提
1 在APP中新建一个包 templatetags 必须是这个名字
2 新建一个py文件 my_tag_filter.py
3.在my_tag_filter.py 文件中
from django import template
register=template.Library() @register.filter
def multi_fliter(x,y): return x*y @register.simple_tag
def multi_tag(x,y): return x*y
2. 使用
<h2>自定义标签和过滤器</h2>
{% load my_tag_filter %} <p>{{ ysl|multi_fliter:20 }}</p> <p>{% multi_tag 7 8 %}</p> {% if ysl|multi_fliter:22 > 100 %}
<p>100</p>
{% else %}
<p>{{ ysl }}</p>
{% endif %} {#{% if multi_tag ysl 20 >100 %}#}
{#<p>100</p>#}
{#{% else %}#}
{#<p>{{ ysl }}</p>#}
{#{% endif %}#} <!-- filter可以用在if等语句,simple_tag不可以 -->
需要先引用
{% load my_tag_filter %}
filter可以用在if等语句,simple_tag不可以
5模版继承
1引用bootstrap,jquery
①在工程下新建一个包 一般叫static

②配置路径
# static 是静态文件的别名
STATIC_URL = '/static/' # 配置 静态文件
STATICFILES_DIRS=[
os.path.join(BASE_DIR,"static"),
]
③重启 django 加载配置
<link rel="stylesheet" type="text/css" href="/static/bootstrap-3.3.7/css/bootstrap.css"> <script type="text/javascript" src="/static/jquery-3.4.1.js"></script>
2. 模版继承样例
advertise.html
<div class="panel panel-danger">
<div class="panel-heading">Panel heading without title</div>
<div class="panel-body">
11111
</div>
</div> <div class="panel panel-success">
<div class="panel-heading">Panel heading without title</div>
<div class="panel-body">
3333
</div>
</div> <div class="panel panel-info">
<div class="panel-heading">Panel heading without title</div>
<div class="panel-body">
555555
</div>
</div>
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"> <!-- 标题模版-->
{% block title %}
<title>base</title>
{% endblock %} <link rel="stylesheet" type="text/css" href="/static/bootstrap-3.3.7/css/bootstrap.css">
<style> .header {
width: 100%;
height: 50px;
background-color: #369;
}
</style>
<script type="text/javascript" src="/static/jquery-3.4.1.js"></script> </head>
<body>
<div class="header"></div>
<div class="container">
<div class="row" style="margin-top: 50px;">
<div class="col-lg-4 col-mg-4"> <!-- 继承 另一个模版 -->
{% include 'advertise.html' %} </div>
<div class="col-lg-8 col-mg-8"> <!-- 内容模版 自己改写 -->
{% block con %}
<h4>content</h4>
{% endblock %} </div>
</div>
</div>
</body>
</html>
auth.html
{% extends 'base.html' %}
{% block title %}
<title>auth</title>
{% endblock %}
{% block con %}
{#{{ block.super }}#}
<h4>login</h4>
<h4>login</h4>
{% endblock con%}
index.html
{% extends "base.html" %}
{% block title %}
<title>index</title>
{% endblock %}
{% block con %}
{# <p> {{ name }}</p>#}
{# <p> {{ p1 }}</p>#}
{# <p> {{ p1.name }}</p>#}
{# <p> {{ test_list.1 }}</p>#}
{# <p> {{ people_list.1.name }}</p>#}
<!-- 过滤器 -->
<h2>过滤器</h2>
<!-- date -->
<p>{{ now|date:"Y-m-d " }}</p>
<!-- length 返回列表和字符串长度-->
<p>{{ test_list|length }}</p>
<!-- filesizeformat 11.2 TB-->
<p>{{ file_size|filesizeformat }}</p>
<!-- default 为空使用默认值 否则使用变量值-->
<p>{{ ysl|default:"没有这个值" }}</p>
<!-- default 为空使用默认值 否则使用变量值-->
<p>{{ link|safe }}</p>
<!-- 要截断的字符数 -->
<p>{{ content|truncatechars:10 }}</p>
<!-- 标签 -->
<h2>标签</h2>
{% for foo in test_list %}
<p>{{ foo }}</p>
{% endfor test_list%}
{% for foo in people_list %}
<p>{{ foo.name }}</p>
{% endfor people_list %}
<!-- 字典遍历-->
{% for key,val in dic.items %}
<p>{{ key }}:{{ val }}</p>
{% endfor %}
{% for key in dic %}
<p>{{ key }}</p>
{% endfor %}
{% for people in people_list %}
<p>{{ people }}</p>
{% endfor %}
<hr>
{% if user %}
<p>
<a href="">hi {{ user }}</a>
<a href="">注销</a>
</p>
{% else %}
<p>
<a href=" ">登录</a>
<a href=" ">注册</a>
</p>
{% endif %}
{% with people_list.1.name as n %}
<p>{{ n }}</p>
<p>{{ n }}</p>
{% endwith %}
<hr>
<h2>自定义标签和过滤器</h2>
{% load my_tag_filter %}
<p>{{ ysl|multi_fliter:20 }}</p>
<p>{% multi_tag 7 8 %}</p>
{% if ysl|multi_fliter:22 > 100 %}
<p>100</p>
{% else %}
<p>{{ ysl }}</p>
{% endif %}
{#{% if multi_tag ysl 20 >100 %}#}
{#<p>100</p>#}
{#{% else %}#}
{#<p>{{ ysl }}</p>#}
{#{% endif %}#}
<!-- filter可以用在if等语句,simple_tag不可以 -->
{% endblock %}
需要注意项:
1 如果你在模版中使用 {% extends %} 标签,它必须是模版中的第一个标签。其他的任何情况下,模版继承都将无法工作。
2 在base模版中设置越多的 {% block %} 标签越好。请记住,子模版不必定义全部父模版中的blocks,所以,你可以在大多数blocks中填充合理的默认内容,然后,只定义你需要的那一个。多一点钩子总比少一点好。
3 如果你发现你自己在大量的模版中复制内容,那可能意味着你应该把内容移动到父模版中的一个 {% block %} 中。
4 为了更好的可读性,你也可以给你的 {% endblock %} 标签一个 名字 。例如:
{% block content %}
...
{% endblock content %}
django的模版的更多相关文章
- Django的模版引擎与模版使用
Django的模版引擎与模版使用 模版引擎是模版响应的后端.模版指的是HTML.css,js等相关的文件.模版引擎是将这些表示层文件与数据相整合在一起,然后将整合后的数据给到响应类型判断采用一次性响应 ...
- Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静态文件的加载load static),自定义simple_tag和inclusion_tag
Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静 ...
- Django之模版层
一.模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别,也就是说,HTML被直接硬编码在python代码之中. def current_datetime(request): now = ...
- 63、django之模版层(template)
上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...
- django之模版层(template)
上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 本篇导论: 模版简介 模版之变量 模版之 ...
- django 自定义模版过滤器
自定义的模版过滤器必须要放在app中,并且该app必须在INSTALLED_APPS中进行安装.然后再在这个app下面创建一个python包叫做templatetags(这个名字是固定的,不能随意更改 ...
- 四. django template模版
往前端浏览器pull一些字符串,这些字符串是一些数据, 那如果想让这些数据按我们的某种格式美化一点/增加样式/图片,就需要用到django提供的模版--模版就是为了让数据看起更美观. 加载模版 dja ...
- Django 之模版层
一.模板简介 将前端页面和Python 的代码分离是一种的开发模式. 为此 Django专门提供了模板系统 (Template System,即模板层)来实现这种模式. Django 的模板 = HT ...
- Django 自定义模版标签和过滤器
实现自定义过滤器 1. 创建register变量 在你的模块文件中,你必须首先创建一个全局register变量,它是用来注册你自定义标签和过滤器的, 你需要在你的python文件的开始处,插入几下代码 ...
- django静态模版使用
第一步:在app目录下建立static文件夹,将CSS文件.js文件放到static文件夹下 第二步:TEMPLATES = [ { 'BACKEND': 'django.template.backe ...
随机推荐
- 借助Radamsa变异数据(初探)
Radamsa 介绍 Radamsa是一款测试用例生成器,通常用来测试程序对格式错误和潜在恶意输入的承受能力(对程序进行模糊测试).它通过你的输入来返回变异后的数据.它的主要卖点是,它已经在真正重要的 ...
- 12月7日内容总结——jQuery查找标签、操作标签、事件和动画效果,Bootstrap页面框架的介绍和使用讲解
目录 一.jQuery查找标签 基本选择器 层级选择器 基本筛选器 属性选择器 表单筛选器 筛选器方法 二.操作标签 样式操作(class操作) 位置操作 尺寸 文本操作 创建标签 属性操作 文档处理 ...
- 11月17日内容总结——黏包现象、struct模块和解决黏包问题的流程、UDP协议、并发编程理论、多道程序设计技术及进程理论
目录 一.黏包现象 什么是黏包 黏包现象产生的原因 二.struct模块及解决黏包问题的流程 struct模块 解决黏包问题初级版本 解决过程中遇到的问题 解决黏包问题终极解决方案 三.粘包代码实战 ...
- jquery(三:jquery的动画)
动画 一:1.显示 show() 参数:1.代表动画执行的时长,毫秒数,也可以是代表时长的字符串 fast normal slow 2.代表方法执行完毕的回调函数 默认的是:normal $(func ...
- 机器学习-集成学习LightGBM
目录 前言 介绍LightGBM LightGBM的背景和起源 LightGBM的优点和适用场景 LightGBM的基本工作原理 安装和配置LightGBM 安装LightGBM 配置LightGBM ...
- KMP 算法(Knuth–Morris–Pratt algorithm)的基本思想
KMP 算法(Knuth–Morris–Pratt algorithm)的基本思想 阅读本文之前,您最好能够了解 KMP 算法解决的是什么问题,最好能用暴力方式(Brute Force)解决一下该问题 ...
- LOJ.数列分块入门3
题目 分析 由大题目知此题分块 注意处理前驱下标的合法性 \(Code\) #include<cstdio> #include<cmath> #include<algor ...
- 如何在VC++ 6.0中实现拖动指令改变执行路径?
前文提要: 在VC6.0之后出现的VS系列开发工具都具有的调试功能:移动指针更改执行流,VC6不支持这个UI操作. 调试程序暂停时,源代码或"反汇编"窗口边距处的黄色箭头标记要运行 ...
- 添加material ui库
ng add @angular/material 自定义预构建主题 ? Choose a prebuilt theme name, or "custom" for a custom ...
- js高德地图添加点Marker,添加线段Polyline,添加一个区域Polygon(面)
高德地图JS API 实例 亲测可用 参考网站=> 阿里云数据可视化平台(下载json用的):http://datav.aliyun.com/portal/school/atlas/area_ ...