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 ...
随机推荐
- 用Java写一个分布式缓存——缓存管理
前言 之前也用过一些缓存中间件,框架,也想着自己是不是也能用Java写一个出来,于是就有了这个想法,打算在写的过程中同步进行总结 源码:weloe/Java-Distributed-Cache (gi ...
- Java入门与进阶P-5.1+P-5.2
初识数组 一.数组 数组是用来存储一个元素个数固定且元素类型相同·的有序集. 数组的两个特点:大小是固定的,且确定之后是不能改变的:数组内的元素类型是相同的. 1.数组的定义(两种): int arr ...
- vue学习笔记(一) ---- vue指令(过滤器)
一.什么是过滤器 官方文档:https://cn.vuejs.org/v2/guide/filters.html 二.过滤器的使用 没有使用过滤器之前: <div id="app&qu ...
- Oracle ADG环境下的RMAN备份策略
作为IT运维人员,尤其是数据库岗位,数据的备份重于一切. 现在很多用户会有一个普遍误区,认为现在类似ADG这类灾备已经很完善,且实时性也更佳,往往就忽略了传统的备份效用. 但实际上,我们千万不能因为有 ...
- idea2022.2.3安装破解
转:https://www.quanxiaoha.com/article/idea-pojie.html 1 注意事项 如果是卸载了旧版本安装的本版本,安装完成后打不开,可能是旧版本的影响 找到:C: ...
- Solon2 开发之插件,二、插件扩展机制(Spi)
插件扩展机制,是基于 "插件" + "配置申明" 实现的解耦的扩展机制(类似 Spring Factories.Java Spi):简单.弹性.自由.它的核心作 ...
- Seal 0.4 发布:软件供应链安全洞察更上一层楼!
今天,我们很高兴宣布 Seal 0.4 已正式发布!在上一个版本中,Seal 完成了从单一产品到全链路平台的转变,通过全局视图帮助用户掌握软件开发生命周期各个环节的安全状况. 在 Seal 0.4 中 ...
- FPS 逆向 CS.起源 绘制 教程(下周完成笔记)
1.找到人物坐标X YZ2.找到鼠标X Y3.易语言读取人物坐标4.读取敌人坐标打开控制台服务器与客户端尽量找客户端 找到XYZ5.实时读取敌人坐标6.三角函数转换屏幕坐标FOV 视场角狙击枪找FOV ...
- 读论文SRCNN:Learning a Deep Convolutional Network for Image Super-Resolution
Learning a Deep Convolutional Network for Image Super-Resolution SRCNN是深度学习应用于SR领域的开山之作. 论文 2014 ECC ...
- GIT初学者详细指令学习
参考网站:https://www.liaoxuefeng.com/wiki/896043488029600 基础概念 1.自定义名字和邮箱号 git config --global user.name ...