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 ...
随机推荐
- angular---处于激活状态的路由加样式
- BUG日记---运行Tomcat报406错误:根据请求中接收到的主动协商头字段,目标资源没有用户代理可以接受的当前表示,而且服务器不愿意提供缺省表示。
网页报错内容 HTTP Status 406 – 不可接收 Type Status Report 描述 根据请求中接收到的主动协商头字段,目标资源没有用户代理可以接受的当前表示,而且服务器不愿意提供缺 ...
- 【数据结构和算法】Trie树简介及应用详解
作者:京东物流 马瑞 1 什么是Trie树 1.1 Trie树的概念 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经 ...
- 剑指Offer 05. 替换空格(java解题)
目录 1. 题目 2. 解题思路(通用 3. 数据类型功能函数总结 4. java代码 1. 题目 请实现一个函数,把字符串 s 中的每个空格替换成%20. 示例 1: 输入:s = "We ...
- zookeeper 部署
官网: https://zookeeper.apache.org/ download 下载完成后 赋值文件到centos /opt/software 单机部署 解压到/opt/module tar ...
- Nginx01 简介和安装
1 简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler ...
- ArcGIS Pro SDK 002 对数据文件的读取和操作
做系统开发或者数据处理的时候,我一般还是喜欢使用文件数据源,例如矢量用.shp文件存储,栅格数据用.tif或者.img文件存储.ArcGIS Pro SDK中对数据源操作的API和ArcObjects ...
- python 排序的几种方式(内置排序函数, 选择排序, 冒泡排序)
#python 排序的方法 #Python 列表有一个内置的 list.sort() 方法可以直接修改列表 list1 = [1,3,5,10,2,1] list1.sort() print(list ...
- linux kali 换源细节
1.打开命令行输入sudo vim /etc/apt/sources.list,并输入密码(也许你进入终端是空白的,也是没有问题的.).这里我们用root身份进去.不然后期会报错. (E45: 're ...
- No.1.9
项目样式补充 精灵图(场景:项目中将多张小图片,合并成一张大图片,这张大图片称之为精灵图) (优点:减少服务器发送次数,减轻服务器的压力,提高页面加载速度) 精灵图的使用步骤:1.创建一个盒子,设置盒 ...