当前位置: 首页 > news >正文

Python web实战之 Django 的模板语言详解

7dc92772fec24af78bf9656d4efee361.png


关键词:

Python、web开发、Django、模板语言

 


概要

 

作为 Python Web 开发的框架之一,Django 提供了一套完整的 MVC 模式,其中的模板语言为开发者提供了强大的渲染和控制前端的能力。本文介绍 Django 的模板语言。

 

1. Django 模板语言入门

Django 的模板语言是一种基于 HTML 的模板语言,它提供了丰富的标签和过滤器来帮助开发者实现前端渲染和逻辑控制。在使用模板语言之前,我们需要先了解 Django 的模板文件结构和渲染方式。

1.1 模板文件的结构

在 Django 中,模板文件通常存放在应用的 templates 目录下。一个模板文件通常由以下几部分组成:

  • 模板头部:包含模板引用其他文件、定义模板块等信息。

  • 模板主体:包含实际的 HTML 代码和模板标签。

  • 模板尾部:包含 JavaScript 代码、CSS 样式等信息。

通常情况下,我们只需要编写模板主体部分,而头部和尾部可以使用已有的模板文件或者框架提供的默认模板。

1.2 模板的渲染方式

在 Django 中,模板文件可以通过视图函数中的 render 函数进行渲染,例如:

from django.shortcuts import renderdef index(request):context = {'title': 'Hello World!'}return render(request, 'index.html', context)

在 render 函数中,第一个参数是请求对象,第二个参数是模板文件名,第三个参数是传递给模板的上下文变量。在模板中,我们可以通过变量名来访问上下文变量,例如:

<h1>{{ title }}</h1>

在模板渲染时,Django 会将模板中的变量替换为上下文变量的值,并执行模板标签和过滤器。

 

2. Django 模板语言进阶

除了简单的变量渲染,Django 的模板语言还提供了丰富的标签和过滤器来实现逻辑控制和数据处理。下面我们将介绍一些常用的模板标签和过滤器。

2.1 模板标签

Django 的模板标签可以实现逻辑控制和数据处理,常用的标签包括:

  • if 标签:用于条件判断。

  • for 标签:用于循环迭代。

  • include 标签:用于引入其他模板文件。

  • block 和 extends 标签:用于模板继承和重载。

  • url 标签:用于生成 URL。

例如,我们可以使用 if 标签来判断一个变量是否为空:

{% if variable %}<p>{{ variable }}</p>
{% else %}<p>Variable is empty.</p>
{% endif %}

使用 for 标签来循环迭代一个列表:

{% for item in list %}<li>{{ item }}</li>
{% endfor %}

使用 include 标签引入其他模板文件:

{% include 'header.html' %}

当我们需要在多个页面中使用相同的 HTML 结构时,可以使用 Django 的模板继承和重载功能,减少代码重复和维护成本。

先创建一个基础模板文件 base.html,定义共用的 HTML 结构和 CSS 样式:

<!DOCTYPE html>
<html>
<head><title>{% block title %}{% endblock %}</title><link rel="stylesheet" href="style.css">
</head>
<body><div id="header">{% block header %}{% endblock %}</div><div id="content">{% block content %}{% endblock %}</div><div id="footer">{% block footer %}{% endblock %}</div>
</body>
</html>

在这个模板中,使用了 block 标签来定义可重载的区域。例如 {% block title %}{% endblock %} 定义了一个名为 title 的区域,该区域可以在子模板中被重载。

接下来创建一个子模板文件 child.html,继承 base.html 并重载其中的区域:

{% extends 'base.html' %}{% block title %}Child Page{% endblock %}{% block header %}<h1>Child Header</h1>
{% endblock %}{% block content %}<p>Child Content</p>
{% endblock %}

在该模板中,我们使用 extends 标签来继承 base.html,并使用 block 标签重载了 title、header 和 content 区域。在渲染该模板时,Django 会自动将子模板中重载的区域插入到父模板中对应的位置,最终生成完整的 HTML 页面。

通过模板继承和重载功能,我们可以更加方便地管理和维护大型 Web 应用程序中的 HTML 结构和样式。

2.2 模板过滤器

Django 的模板过滤器可以对变量进行处理和格式化,常用的过滤器包括:

  • date:用于格式化日期。

  • length:用于获取列表长度。

  • upper 和 lower:用于将字符串转换为大写和小写。

  • join:用于将列表转换为字符串。

  • default:用于设置默认值。

例如,可以使用 date 过滤器来格式化日期:

<p>{{ date|date:"Y-m-d" }}</p>

使用 length 过滤器获取列表长度:

<p>{{ list|length }}</p>

使用 upper 和 lower 过滤器将字符串转换为大写和小写:

<p>{{ string|upper }}</p>
<p>{{ string|lower }}</p>

将日期格式化为指定的字符串。

  <p>{{ post.pub_date|date:"F j, Y" }}</p>

截取列表的一部分元素。

  <ul>{% for item in items|slice:":3" %}<li>{{ item }}</li>{% endfor %}</ul>

将文本中的URL自动转化为链接。

  <p>{{ post.content|urlize }}</p>

 

3. Django 模板语言实战

在实际的 Web 开发中,我们经常需要使用 Django 的模板语言来实现一些常用的功能。下面介绍几个实用的实战案例。

3.1 分页功能

在列表页面中,通常需要实现分页功能。Django 提供了内置的分页模块,可以帮助我们快速实现分页功能。首先,需要在视图函数中引入分页模块:

from django.core.paginator import Paginatordef list(request):items = Item.objects.all()paginator = Paginator(items, 10)page = request.GET.get('page')items = paginator.get_page(page)return render(request, 'list.html', {'items': items})

在模板中,可以使用分页模块提供的标签和过滤器来实现分页功能:

{% for item in items %}<p>{{ item.name }}</p>
{% endfor %}{% if items.has_previous %}<a href="?page={{ items.previous_page_number }}">上一页</a>
{% endif %}{% for i in items.paginator.page_range %}{% if items.number == i %}<strong>{{ i }}</strong>{% else %}<a href="?page={{ i }}">{{ i }}</a>{% endif %}
{% endfor %}{% if items.has_next %}<a href="?page={{ items.next_page_number }}">下一页</a>
{% endif %}

3.2 表单验证功能

在表单页面通常需要验证用户输入的数据是否合法。Django 提供了内置的表单验证模块,可以帮助我们快速实现表单验证功能。首先需要定义一个表单类:

from django import formsclass ContactForm(forms.Form):name = forms.CharField(max_length=50)email = forms.EmailField()message = forms.CharField(widget=forms.Textarea)

这里定义了一个名为 ContactForm 的表单类,其中包含三个字段:name、email 和 message。name 字段使用了 CharField 类来验证用户输入的姓名,限制最大长度为 50 个字符;email 字段使用了 EmailField 类来验证用户输入的电子邮件地址,确保其符合电子邮件地址的格式;message 字段使用了 CharField 类,并使用了 Textarea 组件来允许用户输入多行文本信息。

在视图函数中,我们可以使用表单验证模块来验证用户输入的数据:

from django.shortcuts import render
from .forms import ContactFormdef contact(request):if request.method == 'POST':form = ContactForm(request.POST)if form.is_valid():# 处理用户输入的数据return HttpResponseRedirect('/thanks/')else:form = ContactForm()return render(request, 'contact.html', {'form': form})

在模板中,我们可以使用表单模块提供的标签和过滤器来快速渲染表单:

<form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">提交</button>
</form>

 

技术总结

本文章介绍了 Django 的模板语言,包括模板文件的结构、模板的渲染方式、常用的模板标签和过滤器,以及实用的实战案例。

 

如果文章对你有所帮助,欢迎点赞收藏转发,感谢🙏

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.lryc.cn/news/111487.html

相关文章:

  • 使用ChatGPT编写技术文档
  • Java超级玛丽小游戏制作过程讲解 第四天 创建并完成常量类03
  • webpack基础知识八:说说如何借助webpack来优化前端性能?
  • JAVA SE -- 第十五天
  • macOS 环境变量加载探究
  • 在程序中如何判断该线程的线程id(get_id())的返回值是一个无效值
  • ffmpeg-ffplay代码架构简述
  • ⛳ 多线程面试-什么是多线程上下文切换?
  • vb+SQL车辆管理系统设计与实现
  • java的枚举类
  • 基于java早餐店点餐系统源码设计与实现
  • ODOO16如何处理采购运输正常损耗的成本价核算?
  • 【数据预测】基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#54】
  • 函数式编程-将过程作为返回值的应用:分步过程
  • Mysql-学习笔记
  • 【雕爷学编程】Arduino动手做(187)---1.3寸OLED液晶屏模块2
  • Windows用户如何安装新版本cpolar内网穿透
  • MacBookPro安装Win10,Wifi不能用了,触控板不能用了(2)
  • 理解C++中变量的作用域
  • vue+element-ui给全局请求设置一个loading样式
  • 传球游戏
  • 智能卡通用安全检测指南 思度文库
  • Maven设置阿里云路径(防止加载过慢)
  • JavaScript原型链污染漏洞复现与防范
  • 初识MySQL数据库之用户管理
  • JVM 类文件结构(class文件)
  • PAT乙题1011
  • 【并发专题】单例模式的线程安全(进阶理解篇)
  • 无涯教程-Perl - if...elsif...else语句函数
  • uniapp 实现滑动元素并下方有滚动条显示