Django(2)模板、标签(四)

简介: Django(2)模板、标签(四)

- 注释标签


  • Django中注释使用{# #},例如


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
{# <h1>aaa</h1> #}
<h1>test</h1>
</body>
</html>
  • 访问



53d7d40fb0b742b4a47a11d707a3f6d8.png


- include标签


  • {% include %}标签允许在模板中包含其他模板的内容,例如:
- test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
<h1>test</h1>
{% include "test_2.html" %}   #调用test_2.html的内容
</body>
</html>
- test_2.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试_2</title>
</head>
<body>
<h1>test_2</h1>
</body>
</html>


  • 查看页面


c796a8dd906e46f08a3927557af76a35.png


- csrf_token


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


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


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


解析:

首先,向服务器发送请求,获取登录页面,此时中间件 csrf 会自动生成一个隐藏input标签,该标签里的 value 属性的值是一个随机的字符串,用户获取到登录页面的同时也获取到了这个隐藏的input标签。


然后,等用户需要用到form表单提交数据的时候,会携带这个 input 标签一起提交给中间件 csrf,原因是 form 表单提交数据时,会包括所有的 input 标签,中间件 csrf 接收到数据时,会判断,这个随机字符串是不是第一次它发给用户的那个,如果是,则数据提交成功,如果不是,则返回403权限错误。


- 自定义标签和过滤器


  • 下面是自定义标签和过滤器的过程:


(1)在helloworld的项目目录下创建目录templatetags,与templates目录同级,需要注意,目录名称必须是templatetags


eebafa49b8274c9288af50df198cbaa8.png


(2)在templatetags目录下创建任意的.py文件,这里创建my_tags.py

e772ca689b2641799e3ebe20ab438a08.png


(3)编写文件,写入:


#-*- coding: utf-8 -*-
from django import template
register = template.Library()             #变量名称register是固定的,不能修改


(4)修改settings.py文件的TEMPLATES选项配置,添加libraries配置:


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(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',
            ],
            "libraries":{           #添加
                'my_tags':'templatetags.my_tags'  #添加
            }               #添加
        },
    },
]


(5)利用装饰器@register.filter自定义过滤器,利用装饰器@register.simple_tag自定义标签


注意:装饰器的参数最多只能有2个

#-*- coding: utf-8 -*-
from django import template
register = template.Library()
@register.filter   #自定义过滤器
def my_filter(v1,v2):
    return v1 * v2
@register.simple_tag   #自定义标签
def my_tag1(v1,v2,v3):
    return v1 * v2 * v3

(7)修改模板文件test.html,在body的最上方导入该.py文件,并且在文件中使用我们自定义的过滤器和标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
    {% load my_tags %}   #导入刚才编写的my_tags文件
</head>
<body>
{{ 11 | my_filter:22}}     #使用自定义的过滤器和标签
{% my_tag1 11 22 33 %}
</body>
</html>

此时访问页面,发现我们自定义的过滤器和标签已经生效了



8161c1898c614def82a48b3007d01fee.png


(8)创建语义化标签(语义化的标签,旨在让标签有自己的含义)


  • 在创建的my_tags.py文件中导入mark_safe并且进行修改
#-*- coding: utf-8 -*-
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.simple_tag
def my_html(v1,v2):
    temp_html = "<input type='test' id='%s' class='%s' />" %(v1,v2)
    return mark_safe(temp_html)

然后修改test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
    {% load my_tags %}
</head>
<body>
{% my_html "aaa" "bbb" %}
</body>
</html>
  • 访问页面


9116776c53554f5caf0963fb4d643021.png


- 配置静态文件


  • 这节需要下载图片、bootstrap框架、css页面等,可以去看原文
  • 大致步骤:


  1. 在项目根目录下创建static目录



44aa34e55d6e4b718123a7e7811d44c2.png

  1. settings.py文件最后添加配置:
STATIC_URL = '/static/'  #别名
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "statics"),   #指定目录
]


在static目录下创建css、js、images、plugins目录,分别存放css文件、js文件、图片、插件


把bootstrap框架放入插件目录plugins


在HTML文件的head标签中引擎框架bootstrap


编写模板,模板中加入{% load static %}代码


- 模板继承


  • 模板可以使用继承的方式实现复用,减少冗余内容
  • 网页的头部、尾部内容一般都是一致的,这种情况下就可以通过模板继承来实现复用
  • 父模板用于放置可重复利用的内容,子模板继承父模板的内容,并且放置自己的内容


1、父模板


  • 标签{% block %},这是父模板中的预留区域,该区域留给子模版填充差异性的内容,不同预留区域名称不能相同,例如:
{% block 名称 %} 
预留给子模板的区域,可以设置设置默认内容
{% endblock 名称 %}


2、子模版


  • 子模板使用标签extends去继承父模板,例如:


{% extends %}
  • 子模版如果没有设置父模板预留区域的内容,则使用在父模板设置的默认内容,也可以什么都不设置,为空
  • 下面来看案例:


#编写父模板test_2.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>父页面</title>
</head>
<body>
<h1>Hello World!</h1>
<p>案例</p>
{% block test %}            #名称为test
    <p>测试测试!!!</p>   #中间的内容就是子模板可以替换的部分
{% endblock %}
</body>
</html>
#编写子模版test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>子页面</title>
</head>
<body>
{%extends "test_2.html" %}
{% block test %}     #这里的名称要和父模板名称对应
<p>继承test_2.html文件</p>
{% endblock %}
</body>
</html>


  • 访问页面,可以看到被替换了



fa602ba83dca4439b7bc9f54df4e1576.png


  • 修改子模板,删除{% block %}的内容:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>子页面</title>
</head>
<body>
{%extends "test_2.html" %}
</body>
</html>


  • 再次访问,发现页面完全变成了test_2.html的页面


d380a71b14a2445d91c9859442f15675.png

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