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的模版的更多相关文章

  1. Django的模版引擎与模版使用

    Django的模版引擎与模版使用 模版引擎是模版响应的后端.模版指的是HTML.css,js等相关的文件.模版引擎是将这些表示层文件与数据相整合在一起,然后将整合后的数据给到响应类型判断采用一次性响应 ...

  2. Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静态文件的加载load static),自定义simple_tag和inclusion_tag

    Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静 ...

  3. Django之模版层

    一.模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别,也就是说,HTML被直接硬编码在python代码之中. def current_datetime(request): now = ...

  4. 63、django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...

  5. django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 本篇导论: 模版简介 模版之变量 模版之 ...

  6. django 自定义模版过滤器

    自定义的模版过滤器必须要放在app中,并且该app必须在INSTALLED_APPS中进行安装.然后再在这个app下面创建一个python包叫做templatetags(这个名字是固定的,不能随意更改 ...

  7. 四. django template模版

    往前端浏览器pull一些字符串,这些字符串是一些数据, 那如果想让这些数据按我们的某种格式美化一点/增加样式/图片,就需要用到django提供的模版--模版就是为了让数据看起更美观. 加载模版 dja ...

  8. Django 之模版层

    一.模板简介 将前端页面和Python 的代码分离是一种的开发模式. 为此 Django专门提供了模板系统 (Template System,即模板层)来实现这种模式. Django 的模板 = HT ...

  9. Django 自定义模版标签和过滤器

    实现自定义过滤器 1. 创建register变量 在你的模块文件中,你必须首先创建一个全局register变量,它是用来注册你自定义标签和过滤器的, 你需要在你的python文件的开始处,插入几下代码 ...

  10. django静态模版使用

    第一步:在app目录下建立static文件夹,将CSS文件.js文件放到static文件夹下 第二步:TEMPLATES = [ { 'BACKEND': 'django.template.backe ...

随机推荐

  1. PHP转Go实践:xjson解析神器「开源工具集」

    前言 近期会更新一系列开源项目的文章,新的一年会和大家做更多的开源项目,也欢迎大家加入进来. xutil 今天分享的文章源自于开源项目jinzaigo/xutil的封装. 在封装过程中,劲仔将实现原理 ...

  2. Ubuntu安装Anaconda并且配置国内镜像教程

    前言 我们在学习 Python 的时候需要不同的 Python 版本,关系到电脑环境变量配置换来换去很是麻烦,所以这个时候我们需要一个虚拟的 Python 环境变量,我之前也装过 virtualenv ...

  3. vulnhub靶场之FUNBOX: GAOKAO

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Funbox: GaoKao,下载地址:https://download.vulnhub.com/funbox/FunboxGaoKao.ova ...

  4. SQLSERVER 阻塞之 PFS 页到底是什么?

    一:背景 1. 讲故事 在 SQLSERVER 的众多阻塞场景中,有不小的一部分是由于 PFS 页上的 闩锁 等待造成的,毕竟写页操作一定是要串行化的,在面对 闩锁(PAGELATCH_X) 等待问题 ...

  5. springboot集成ElasticApm

    jvm参数方式: -javaagent:D:/codesoft/elastic-apm-agent-1.18.0.jar -Delastic.apm.service_name=my-applicati ...

  6. 一文详解数仓GaussDB(DWS) 函数出参带出方式

    摘要:本文主要讲解DWS函数出参带出方式. 本文分享自华为云社区<GaussDB(DWS)功能 -- 函数出参 #[玩转PB级数仓GaussDB(DWS)]>,作者:譡里个檔 . DWS的 ...

  7. 力扣每日一题2023.1.19---2299. 强密码检验器 II

    如果一个密码满足以下所有条件,我们称它是一个 强 密码:    它有至少 8 个字符.    至少包含 一个小写英文 字母.    至少包含 一个大写英文 字母.    至少包含 一个数字 .    ...

  8. JAVA虚拟机12--Class文件结构-属性表

    1 属性表 1.1 简介 属性表(attribute_info)在前面的讲解之中已经出现过数次,Class文件.字段表.方法表都可以携带自己的属性表集合,以描述某些场景专有的信息. <Java虚 ...

  9. 2.1.新建项目及项目目录和预览uni项目

    目录结构 一个uni-app工程,默认包含如下目录及文件 static目录 使用注意 编译到任意平台时,static 目录下除不满足条件编译的文件,会直接复制到最终的打包目录,不会打包编译.非 sta ...

  10. ChatGPT国内镜像模板,国内使用ChatGPT中文版本

    @ 目录 一.什么是ChatGPT国内镜像 二.ChatGPT国内镜像使用教程 免费ChatGPT镜像的功能: 三.ChatGPT中文版作用 四.怎么使用ChatGPT国内镜像 五.中文ChatGPT ...