Django的模板系统是一个强大的工具,用于将动态数据渲染到HTML页面中。以下是Django模板系统的详细用法:
模板的基本概念
Django模板使用一个特殊的语法来插入变量、标签和过滤器。
创建模板
- 创建模板目录 :在你的Django应用中创建一个名为
templates
的目录。 - 编写模板文件 :在
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页面。