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. C艹 里 printf 和 cout 的区别总结

    1. printf里面打出%需要连着打出两次 打出一次默认为格式标识符 打出两次: 2. 当 未完待续

  2. 图文并茂--微信小程序,获取用户地理位置信息,并调用腾讯地图API来获取用户具体位置

    今天开始搞这个东西,下面是详细的记录 先看一下效果啦 1.小程序代码先获取用户基础位置信息 js data: { myLocation: 'GET LOCATION', }, openMap() { ...

  3. Docker+nginx部署前后端分离项目

    1.下载Docker和Docker-Compose 1.安装Docker 记一次踩坑:误装podman-docker 问题概述:Centos8去下载Docker时,默认装的是podman-docker ...

  4. 力扣---2319. 判断矩阵是否是一个 X 矩阵

    如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 :    矩阵对角线上的所有元素都 不是 0    矩阵中所有其他元素都是 0给你一个大小为 n x n 的二维整数数组 grid ,表 ...

  5. Spring04-AOP(Debug查看执行流程)

    1 AOP的几个核心技术 AOP-面向切面编程的实现的核心技术:jvm运行期间对字节码进行修改或者动态生成新的字节码文件(asm技术). 2 AOP的几个核心概念 AOP在运行期间我们要对class文 ...

  6. 《关于我因为flink成为spark源码贡献者这件小事》

    各位读者老爷请放下手上的板砖,我可真没有标题党,且容老弟慢慢道来. spark和flink本身相信我不用做过多的介绍,后端同学不管搞没搞过大数据,应该都多多少少听过. 如果没听过,简单说,spark和 ...

  7. windwos提权漏洞CVE-2023-21746复现(LocalPotato)

    0x01 漏洞原理 LocalPotato攻击是一种针对本地认证的NTLM反射攻击. Windows NTLM 在进行身份验证时存在漏洞,允许拥有低权限的本地攻 击者通过运行特制程序将权限提升至 SY ...

  8. 高仿微信|基于Windows微信实现一个IM即时通讯App

    本文干货充足篇幅较长,建议收藏后阅读避免迷路.文末可获取[自动聊天机器人源码和Demo]. 即时通讯IM概述 如果能开发一款即时聊天App,能和微信消息互通,并且只需少许代码量,应该是件非常兴奋的事情 ...

  9. redis(4)String字符串

    前言 Redis中有5大数据类型,分别是字符串String.列表List.集合Set.哈希Hash.有序集合Zset,本篇介绍Redis的字符串String Redis字符串 String是Redis ...

  10. python实现移动二级目录下的文件到一级目录

    python实现移动二级目录下的文件到一级目录 import os import shutil import sys def move_to_work_folder(work_path, cur_pa ...