Django学习笔记五:templates使用详解

Django的模板系统是一个强大的工具,用于将动态数据渲染到HTML页面中。以下是Django模板系统的详细用法:

模板的基本概念

Django模板使用一个特殊的语法来插入变量、标签和过滤器。

创建模板

  1. 创建模板目录 :在你的Django应用中创建一个名为templates的目录。
  2. 编写模板文件 :在templates目录中创建HTML文件,文件扩展名通常为.html

模板继承

Django模板支持继承,这意味着你可以创建一个基础模板,并允许其他模板继承它。

html 复制代码
<!-- base.html -->
<html>
<head>
    <title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>
html 复制代码
<!-- child.html -->
{% extends "base.html" %}

{% block title %}Home Page{% endblock %}

{% block content %}
    <h1>Welcome to my site!</h1>
{% endblock %}

变量

在模板中,变量用{``{ variable }}表示。

html 复制代码
<p>Hello, {{ name }}!</p>

标签

Django模板提供了许多内置标签,例如for循环、if条件语句等。

html 复制代码
{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}!</p>
{% else %}
    <p>Welcome, guest!</p>
{% endif %}

过滤器

过滤器可以被用来修改变量的输出。过滤器使用|符号。

html 复制代码
{{ article.pub_date|date:"Y-m-d" }}

自定义过滤器

你可以创建自己的过滤器,并在模板中使用它们。

python 复制代码
# 在应用的模板tags目录中创建一个自定义过滤器
from django import template

register = template.Library()

@register.filter(name='my_filter')
def my_filter(value):
    return value.upper()

然后在模板中使用:

html 复制代码
{{ my_variable|my_filter }}

模板标签

模板标签用于执行特定的逻辑。

html 复制代码
{% for article in articles %}
    <p>{{ article.title }}</p>
{% endfor %}

模板中的URL

在模板中,你可以使用url标签来生成URL。

html 复制代码
<a href="{% url 'view_name' arg %}">Link</a>

注释

在模板中,你可以使用{# ... #}来添加注释。

html 复制代码
{# 这是一个注释 #}

静态文件

在模板中,你可以使用{% static %}标签来引用静态文件。

html 复制代码
<link rel="stylesheet" href="{% static 'css/style.css' %}">

模板上下文

在视图中,你可以传递一个上下文字典给模板。

python 复制代码
from django.shortcuts import render

def my_view(request):
    return render(request, 'my_template.html', {'name': 'Kimi'})

模板字符串

你可以在模板中使用模板字符串来创建动态内容。

html 复制代码
{% with name="Kimi" %}
    <p>Hello, {{ name }}!</p>
{% endwith %}

模板中的表单

Django模板提供了表单渲染的标签,例如form标签和form.as_p

html 复制代码
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>

模板中的静态方法

在模板中,你可以使用{``{ form.field.label_tag }}来渲染字段的标签。

模板中的循环

你可以在模板中使用for循环来迭代数据。

html 复制代码
<ul>
    {% for item in items %}
        <li>{{ item.name }}</li>
    {% endfor %}
</ul>

模板中的条件

你可以在模板中使用if标签来执行条件逻辑。

html 复制代码
{% if user.is_authenticated %}
    <p>Welcome back, {{ user.username }}!</p>
{% else %}
    <p>Please log in.</p>
{% endif %}

模板中的注释

你可以在模板中使用{# ... #}来添加注释。

html 复制代码
{# 这是一个注释 #}

模板中的URL反向解析

你可以使用url标签来生成URL。

html 复制代码
<a href="{% url 'view_name' arg %}">Link</a>

模板中的静态文件

你可以使用static标签来引用静态文件。

html 复制代码
<link rel="stylesheet" href="{% static 'css/style.css' %}">

模板中的自定义标签和过滤器

你可以创建自定义标签和过滤器,并在模板中使用它们。

模板中的模板

你可以在一个模板中包含另一个模板。

html 复制代码
{% include "sidebar.html" %}

模板中的转义字符

在模板中,你可以使用{``{ variable|escape }}来转义HTML。

模板中的缓存

你可以使用{% cache %}标签来缓存模板的部分内容。

html 复制代码
{% cache 500 sidebar %}
    <!-- 缓存的内容 -->
{% endcache %}

通过这些基本的用法,你可以创建动态且功能丰富的Web页面。

相关推荐
viperrrrrrrrrr73 小时前
大数据学习(96)-Hive面试题
大数据·hive·学习
charlie1145141913 小时前
STM32F103C8T6单片机的起始点:使用GPIO输出点亮我们的第一个小灯(HAL库版本)
stm32·单片机·嵌入式硬件·学习·教程·hal库·gpio
郭涤生4 小时前
第三章:事务处理_《凤凰架构:构建可靠的大型分布式系统》
笔记·架构·系统架构
每次的天空4 小时前
Android学习总结之算法篇五(字符串)
android·学习·算法
寻丶幽风5 小时前
论文阅读笔记——RDT-1B: A DIFFUSION FOUNDATION MODEL FOR BIMANUAL MANIPULATION
论文阅读·笔记·扩散模型·具身智能·双壁机器人
奕天者5 小时前
C++学习笔记(三十三)——forward_list
c++·笔记·学习
m0_689618286 小时前
看爬山虎学本领 软爬机器人来创新 各种场景能适应
笔记·机器人
珊瑚里的鱼6 小时前
第五讲(下)| string类的模拟实现
开发语言·c++·笔记·程序人生·算法·visualstudio·visual studio
郭涤生6 小时前
第七章:从类库到服务的分布式基石_《凤凰架构:构建可靠的大型分布式系统》
笔记·分布式·架构
武昌库里写JAVA6 小时前
Golang的消息中间件选型
java·开发语言·spring boot·学习·课程设计