Django模板的使用方法

简介: 1.模板后端的默认配置Django在创建项目的时候,默认定义的TEMPLATES如下:


1.模板后端的默认配置


Django在创建项目的时候,默认定义的TEMPLATES如下:


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates']
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]


DIRS:

一个目录列表,指定模板文件的存放路径。模板引擎将按照列表中定义的顺序查找模板文件

APP_DIRS:

一个布尔值,为True时,模板引擎会在已安装应用的templates子目录中查找模板


2.在视图中使用模板


新建模板文件:

app中新建templates文件夹:


37c5764bf6d84961ada2396ab806e679.png


新建index.html文件:


<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>IMUSTCTF</title>
</head>
<body>
<h1>你好啊</h1>
{{ name }}
</body>
</html>


视图中使用模板:


def model_test(request):
    return render(request, 'index.html', {'name': 'dahezhiquan'})


访问视图路径,显示如下:


f9e256d2cc2a45a28f66b33fb3518614.png


3.Django模板标签


模板标签,用于后端向前端传递数据


变量


语法:


view:{"HTML变量名" : "views变量名"}
HTML:{{变量名}}


def text(request):
  views_name = "模板变量测试"
  return  render(request,"text.html", {"name":views_name})
-----------------------------------------------------------
html文件:
<p>{{ name }}</p>
会回显views_name的值


列表


可以用 . 索引下标取出对应的元素


from django.shortcuts import render
def text(request):
    views_list = ["a","b","c"]
    return render(request, "text.html", {"views_list": views_list})
-----------------------------------------------------------------------
html文件:
<p>{{ views_list }}</p>   # 取出整个列表
<p>{{ views_list.0 }}</p> # 取出列表的第一个元素a


字典


可以用 .键 取出对应的值


from django.shortcuts import render
def text(request):
    views_dict = {"name":"imustctf"}
    return render(request, "text.html", {"views_dict": views_dict})
----------------------------------------------------------------------
html文件:
<p>{{ views_dict }}</p>         #取出整个字典
<p>{{ views_dict.name }}</p>    #取出name键对应的值


过滤器


模板语法:


{{ 变量名 | 过滤器:可选参数 }}


模板过滤器可以在变量被显示前修改它

常用过滤器:


{{ name|lower }}         #文档大写转换文本为小写
{{ bio|truncatewords:"30" }}       #将显示变量 bio 的前30个词
{{ name|default:"666" }}           #default 为变量提供一个默认值
{{ name|length }}                   #返回对象的长度,适用于字符串和列表
#字典返回的是键值对的数量,集合返回的是去重后的长度
{{ num|filesizeformat }}            #以更易读的方式显示文件的大小(即'13 KB', '4.1 MB', '102 bytes'等)
#字典返回的是键值对的数量,集合返回的是去重后的长度
{{ time|date:"Y-m-d" }}            #根据给定格式对一个日期变量进行格式化
{{ views_str|truncatechars:2 }}     #如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分
#截断的字符串将以 ... 结尾,中文占两个字符长度
{{ views_str|safe }}         
#将字符串标记为安全,不需要转义
#Django 会自动对 views.py 传到HTML文件中的标签语法进行转义,令其语义失效
#加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效
#例如:
from django.shortcuts import render
def text(request):    
    views_str = "<a href='https://www.baidu.com/'>点击跳转</a>"    
    return render(request, "text.html", {"views_str": views_str})
模板中会自动生成views_str的html语句,且可以正常执行


if/else标签


例如:


{%if num > 90 and num <= 100 %}
优秀
{% elif num > 60 and num <= 90 %}
合格
{% else %}
不合格
{% endif %}


for标签


例如:


#遍历列表
{% for i in views_list %}
{{ i }}
{% endfor %}
#遍历字典
{% for i,j in views_dict.items %}
{{ i }}---{{ j }}
{% endfor %}


在 {% for %} 标签里可以通过 {{forloop}} 变量获取循环序号


forloop.counter: 顺序获取循环序号,从 1 开始计算

forloop.counter0: 顺序获取循环序号,从 0 开始计算

forloop.revcounter: 倒序获取循环序号,结尾序号为 1

forloop.revcounter0: 倒序获取循环序号,结尾序号为 0

forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False

forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False


{% for i in listvar %}
    {{ forloop.counter }}
    {{ forloop.counter0 }}
    {{ forloop.revcounter }}
    {{ forloop.revcounter0 }}
    {{ forloop.first }}
    {{ forloop.last }}
{% endfor %}

可选的 {% empty %} 从句:在循环为空的时候执行

{% for i in listvar %}
    {{ forloop.counter0 }}
{% empty %}
    空空如也~
{% endfor %}


可以嵌套使用 {% for %} 标签:


{% for athlete in athlete_list %}
    <h1>{{ athlete.name }}</h1>
    <ul>
    {% for sport in athlete.sports_played %}
        <li>{{ sport }}</li>
    {% endfor %}
    </ul>
{% endfor %}


include标签


{% include %} 标签允许在模板中包含其它的模板的内容


{% include "index.html" %}


4.csrf_token


csrf_token 用于form表单中,作用是跨站请求伪造保护。


如果不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报403权限错误。


用了{% csrf_token %}标签,在 form 表单提交数据时,才会成功。


目录
相关文章
|
6月前
|
SQL 前端开发 JavaScript
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
64 0
|
2月前
|
Java C++ Python
django 模板 过滤器
django 模板 过滤器
|
3月前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
3月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
29 1
|
3月前
|
前端开发 Python
Django模板
【8月更文挑战第19天】
30 3
|
3月前
|
自然语言处理 前端开发 数据处理
Django的模板系统
【8月更文挑战第13天】
28 2
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
114 0
|
3月前
|
前端开发 数据处理 开发者
解锁Django模板系统终极奥义!揭秘高效前端渲染秘籍,让你的网站秒变炫酷黑科技!
【8月更文挑战第31天】Django作为Python的高级Web框架,内置的模板系统支持动态HTML渲染。本文通过在线书店案例,详细介绍Django模板系统的设置与高效渲染技巧,包括创建模板文件、编写视图函数及URL配置。通过合理使用过滤器、深度查询和模板继承等技巧,提升前端渲染效率和安全性,优化Web应用开发流程。
24 0
|
3月前
|
安全 JavaScript 前端开发
Django入门到放弃之模板及标签
Django入门到放弃之模板及标签
|
5月前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用合集之基于django应用模板创建的FC,如何配置数据库
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。