跳到主要内容

Django 模板标签

Django模板标签是Django模板系统中的核心功能之一,它们允许开发者在HTML模板中嵌入逻辑和控制结构,从而实现动态内容的渲染。通过模板标签,开发者可以轻松地在模板中执行条件判断、循环遍历、变量输出等操作。

什么是Django模板标签?

Django模板标签是一种特殊的语法结构,用于在模板中执行逻辑操作。它们通常以 {% %} 包裹,例如 {% if %}{% for %} 等。模板标签可以用于控制模板的渲染流程,例如根据条件显示不同的内容,或者遍历一个列表并生成相应的HTML。

备注

模板标签与模板变量不同。模板变量用于输出动态内容,而模板标签用于控制模板的逻辑流程。

常用模板标签

1. {% if %} 标签

{% if %} 标签用于在模板中执行条件判断。它类似于Python中的 if 语句,可以根据条件的真假来决定是否渲染某部分内容。

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

在这个例子中,如果用户已登录(user.is_authenticatedTrue),则显示欢迎信息;否则,提示用户登录。

2. {% for %} 标签

{% for %} 标签用于在模板中遍历一个可迭代对象(如列表、字典等),并为每个元素生成相应的HTML。

html
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>

在这个例子中,items 是一个列表,{% for %} 标签会遍历列表中的每个元素,并将其渲染为一个 <li> 元素。

3. {% block %}{% extends %} 标签

{% block %}{% extends %} 标签用于模板继承。模板继承是Django模板系统中的一个强大功能,允许开发者创建一个基础模板,并在子模板中覆盖或扩展基础模板的内容。

基础模板 (base.html):

html
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>

子模板 (child.html):

html
{% extends "base.html" %}

{% block title %}My Page{% endblock %}

{% block content %}
<p>This is the content of my page.</p>
{% endblock %}

在这个例子中,child.html 继承了 base.html,并覆盖了 titlecontent 块的内容。

4. {% include %} 标签

{% include %} 标签用于在模板中包含另一个模板的内容。这有助于将模板分解为更小的、可重用的部分。

html
<div class="header">
{% include "header.html" %}
</div>

在这个例子中,header.html 的内容会被插入到当前模板的 div 元素中。

实际应用场景

场景1:动态导航栏

假设你有一个网站,导航栏的内容需要根据用户的登录状态动态显示。你可以使用 {% if %} 标签来实现这一功能。

html
<nav>
<a href="/">Home</a>
{% if user.is_authenticated %}
<a href="/profile/">Profile</a>
<a href="/logout/">Logout</a>
{% else %}
<a href="/login/">Login</a>
<a href="/register/">Register</a>
{% endif %}
</nav>

场景2:商品列表

假设你有一个电子商务网站,需要展示商品列表。你可以使用 {% for %} 标签来遍历商品列表并生成相应的HTML。

html
<div class="products">
{% for product in products %}
<div class="product">
<h2>{{ product.name }}</h2>
<p>{{ product.description }}</p>
<p>Price: ${{ product.price }}</p>
</div>
{% endfor %}
</div>

总结

Django模板标签是Django模板系统中的重要组成部分,它们允许开发者在HTML模板中嵌入逻辑和控制结构,从而实现动态内容的渲染。通过掌握常用的模板标签,如 {% if %}{% for %}{% block %}{% include %},你可以轻松地构建复杂的、动态的Web页面。

附加资源与练习

  • 官方文档: Django模板标签官方文档
  • 练习: 尝试创建一个Django项目,并使用模板标签实现一个动态导航栏和商品列表页面。
提示

在编写模板时,尽量保持模板的简洁和可读性。如果逻辑过于复杂,考虑将部分逻辑移到视图函数或自定义模板标签中。