深入Django(四)

Django模板系统

引言

在之前的几天中,我们介绍了Django的基本概念、模型和视图。今天我们将探讨Django的模板系统,它负责将数据和HTML模板结合起来,生成最终用户看到的内容。

Django模板系统概述

Django的模板系统是一个强大的工具,用于将动态数据插入到静态或半静态的页面中。它使用自己的模板语言,允许你在HTML中嵌入Python代码。

创建模板

  1. 创建模板文件:在你的Django应用目录下,创建一个名为templates的文件夹。Django会自动在这个文件夹中查找模板文件。
  2. myapp/├── templates/ │ └── base.html └── ...
  3. 编写模板:在templates文件夹中,创建一个HTML文件并编写你的模板。
  4. DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Titletitle>head><body> <h1>Welcome to my siteh1> {% block content %} {% endblock %}body>html>
  5. 在这个例子中,{% block content %}是一个占位符,它允许子模板覆盖或扩展这个部分。

使用模板

  1. 在视图中加载模板:使用render函数来加载模板并传递数据。
  2. from django.shortcuts import renderdef home(request): context = {'name': 'Django'} return render(request, 'home.html', context)
  3. 配置URL:确保你的URL配置指向正确的视图。
  4. from django.urls import pathfrom .views import homeurlpatterns = [ path('', home, name='home'),]

Django模板语言

Django模板语言提供了许多控制结构,如if语句、for循环等,以及过滤器和标签。

控制结构
  • If语句:根据条件渲染内容。
  • {% if user.is_authenticated %} <p>Welcome, {{ user.username }}!p>{% else %} <p>You are not logged inp>{% endif %}
  • For循环:遍历列表或查询集。
  • <ul>{% for post in posts %} <li>{{ post.title }}li>{% endfor %}ul>
过滤器

过滤器可以用来修改变量的值。

  • 日期格式化
  • <p>Posted on: {{ post.published_date|date:"D, d M Y" }}p>
  • 字符串截取
  • <p>Short title: {{ post.title|truncatewords:10 }}p>
自定义过滤器

你还可以创建自定义过滤器。

  1. 创建自定义过滤器:在你的应用目录下,创建一个templatetags文件夹,并在其中创建一个__init__.py文件和一个Python文件,比如custom_filters.py
  2. myapp/├── templatetags/ │ ├── __init__.py │ └── custom_filters.py └── ...
  3. 编写自定义过滤器
  4. # custom_filters.pyfrom django import templateregister = template.Library()@register.filterdef add(value, arg): try: return int(value) + int(arg) except ValueError: return value
  5. 在模板中使用自定义过滤器
  6. {{ 5|add:"3" }}

模板继承

模板继承允许你创建一个基础模板,并让其他模板继承它,这样你可以保持一致的布局和样式。

  1. 创建基础模板:我们已经在上文中创建了一个基础模板base.html
  2. 创建子模板:创建一个子模板,继承并扩展基础模板。
  3. {% extends 'base.html' %} {% block content %}<h2>Welcome to the Home Pageh2>{% endblock %}

总结

在今天的教程中,我们学习了Django模板系统的基本概念,包括如何创建模板、使用模板、Django模板语言的控制结构、过滤器以及模板继承。模板系统是Django中渲染动态内容的关键部分,它使得前端开发变得更加简单和高效。

上一篇:爬虫笔记19——代理IP的使用


下一篇:DP:二维费用背包问题-????例题