跳转到内容

Django模板标签

来自代码酷
Admin留言 | 贡献2025年5月1日 (四) 01:49的版本 (Page creation by admin bot)

(差异) ←上一版本 | 已核准修订 (差异) | 最后版本 (差异) | 下一版本→ (差异)

Django模板标签[编辑 | 编辑源代码]

Django模板标签是Django模板系统(Template System)的核心组成部分之一,用于在HTML模板中嵌入动态逻辑。它们允许开发者执行条件判断、循环迭代、变量赋值等操作,而无需在视图中处理所有逻辑。模板标签通常由大括号和百分号包围,例如{% tag %}

基本语法[编辑 | 编辑源代码]

Django模板标签的基本语法结构如下:

{% tag_name arguments %}

其中:

  • tag_name是标签的名称(如iffor等)。
  • arguments是可选的参数或表达式,具体取决于标签的功能。

常用模板标签[编辑 | 编辑源代码]

条件判断:{% if %}[编辑 | 编辑源代码]

{% if %}标签用于在模板中进行条件判断,类似于Python中的if语句。

示例[编辑 | 编辑源代码]

{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}!</p>
{% else %}
    <p>Please log in.</p>
{% endif %}

输出[编辑 | 编辑源代码]

  • 如果用户已登录,显示欢迎消息。
  • 如果用户未登录,提示登录。

循环迭代:{% for %}[编辑 | 编辑源代码]

{% for %}标签用于遍历可迭代对象(如列表、查询集等)。

示例[编辑 | 编辑源代码]

<ul>
{% for item in items %}
    <li>{{ item.name }}</li>
{% empty %}
    <li>No items available.</li>
{% endfor %}
</ul>

输出[编辑 | 编辑源代码]

  • 如果items不为空,渲染每个项目的名称。
  • 如果items为空,显示“No items available”。

变量赋值:{% with %}[编辑 | 编辑源代码]

{% with %}标签用于在模板中临时赋值变量,避免重复计算或访问复杂表达式。

示例[编辑 | 编辑源代码]

{% with total=items|length %}
    <p>Total items: {{ total }}</p>
{% endwith %}

输出[编辑 | 编辑源代码]

显示items的长度。

模板继承:{% extends %}{% block %}[编辑 | 编辑源代码]

Django的模板继承机制允许创建基础模板(父模板)并在子模板中覆盖特定部分。

父模板(base.html)[编辑 | 编辑源代码]

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Default Title{% endblock %}</title>
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

子模板(child.html)[编辑 | 编辑源代码]

{% extends "base.html" %}

{% block title %}Custom Title{% endblock %}

{% block content %}
    <p>This is the child template content.</p>
{% endblock %}

输出[编辑 | 编辑源代码]

子模板继承父模板的结构,并覆盖titlecontent块。

高级模板标签[编辑 | 编辑源代码]

自定义标签[编辑 | 编辑源代码]

开发者可以创建自定义模板标签以扩展功能。自定义标签需要: 1. 在templatetags目录中创建Python模块。 2. 使用@register.simple_tag@register.inclusion_tag装饰器注册标签。

示例:自定义标签[编辑 | 编辑源代码]

# myapp/templatetags/custom_tags.py
from django import template

register = template.Library()

@register.simple_tag
def current_time(format_string):
    from datetime import datetime
    return datetime.now().strftime(format_string)

在模板中使用[编辑 | 编辑源代码]

{% load custom_tags %}
<p>Current time: {% current_time "%Y-%m-%d %H:%M:%S" %}</p>

输出[编辑 | 编辑源代码]

显示当前时间,格式为YYYY-MM-DD HH:MM:SS

过滤器标签:{% filter %}[编辑 | 编辑源代码]

{% filter %}标签用于对块内的内容应用过滤器。

示例[编辑 | 编辑源代码]

{% filter upper %}
    This text will be uppercase.
{% endfilter %}

输出[编辑 | 编辑源代码]

THIS TEXT WILL BE UPPERCASE.

实际应用案例[编辑 | 编辑源代码]

分页显示[编辑 | 编辑源代码]

使用{% for %}和条件判断实现分页逻辑。

<div class="pagination">
    {% if page_obj.has_previous %}
        <a href="?page=1">First</a>
        <a href="?page={{ page_obj.previous_page_number }}">Previous</a>
    {% endif %}

    <span>Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</span>

    {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}">Next</a>
        <a href="?page={{ page_obj.paginator.num_pages }}">Last</a>
    {% endif %}
</div>

动态导航菜单[编辑 | 编辑源代码]

根据用户权限显示不同的导航项。

<ul>
    <li><a href="/">Home</a></li>
    {% if user.is_staff %}
        <li><a href="/admin/">Admin Panel</a></li>
    {% endif %}
</ul>

模板标签的Mermaid流程图[编辑 | 编辑源代码]

以下是一个简单的模板标签处理流程:

graph TD A[模板引擎解析模板] --> B[遇到模板标签] B --> C{标签类型?} C -->|if/for等| D[执行逻辑] C -->|自定义标签| E[调用自定义函数] D --> F[生成HTML] E --> F

数学公式支持[编辑 | 编辑源代码]

如果需要计算模板中的数值,可以使用数学公式。例如,计算百分比: Percentage=(parttotal)×100

总结[编辑 | 编辑源代码]

Django模板标签提供了强大的逻辑控制能力,使得模板可以动态渲染内容而无需在视图中处理所有细节。通过合理使用内置标签和自定义标签,开发者可以创建灵活且易于维护的模板系统。