19 Django模板渲染数据教程

19 Django模板渲染数据教程

在本节中,我们将学习如何在Django中使用模板渲染数据。模板是Django中的一个关键组成部分,通过它可以将动态数据展示给用户。

模板基础

在Django中,模板文件通常位于templates目录下。我们使用HTML文件作为模板,并结合Django templating language(Django模板语言)来渲染数据。

创建一个模板

首先,我们需要创建一个模板文件。假设我们创建一个名为index.html的模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>欢迎来到我的网站</title>
</head>
<body>
<h1>欢迎, {{ user.username }}!</h1>
<p>这是您的个人资料:</p>
<ul>
<li>邮箱: {{ user.email }}</li>
<li>注册日期: {{ user.date_joined }}</li>
</ul>
</body>
</html>

在这个模板中,我们使用了 {{ }} 语法来插入动态数据。

连接视图与模板

接下来,我们需要定义一个视图,该视图将渲染这个模板。让我们在views.py中添加一个视图函数:

1
2
3
4
5
6
7
from django.shortcuts import render
from django.contrib.auth.models import User

def user_profile(request):
# 假设我们从数据库获取了一个用户对象
user = User.objects.get(pk=request.user.id)
return render(request, 'index.html', {'user': user})

在这个视图中,我们使用了render函数来渲染模板。第二个参数是一个字典,包含我们想要传递给模板的数据。在这里,我们将user对象传递给模板。

设置路由

现在,我们需要将这个视图与一个URL关联。我们可以在urls.py中进行设置:

1
2
3
4
5
6
from django.urls import path
from .views import user_profile

urlpatterns = [
path('profile/', user_profile, name='user_profile'),
]

这样,当用户访问/profile/时,将触发user_profile视图,从而渲染index.html模板。

运行服务器

确保你的Django服务器正在运行,可以通过以下命令启动:

1
python manage.py runserver

然后访问http://127.0.0.1:8000/profile/,你将看到你的模板渲染的数据。

常用模板标签

在Django模板中,除了使用{{ }}插入数据外,我们还可以使用标签来增强模板的功能。例如,{% if %}{% for %} 是非常常用的标签。

示例:使用for循环

假设我们要显示多个用户的个人信息,我们可以在视图中修改数据,示例代码如下:

1
2
3
def user_list(request):
users = User.objects.all()
return render(request, 'user_list.html', {'users': users})

然后在 user_list.html 模板中,我们可以使用 for 循环来遍历这些用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<h1>用户列表</h1>
<ul>
{% for user in users %}
<li>{{ user.username }} - {{ user.email }}</li>
{% empty %}
<li>没有用户信息。</li>
{% endfor %}
</ul>
</body>
</html>

结尾

通过以上步骤,你已经学会了如何在Django中使用模板渲染数据。模板不仅可以显示数据,还可以通过标签和过滤器来处理数据,使得展示更加灵活和强大。接下来可以试着添加样式,或者更复杂的逻辑,以便深入理解Django模板的强大之处。

20 Django 模板继承机制详解

20 Django 模板继承机制详解

Django 的模板继承机制是其强大且灵活的一部分,可以帮助我们减少代码重复,提高开发效率。本文将通过示例来详细讲解这一机制。

模板的基本概念

在 Django 中,模板是用于生成 HTML 内容的文本文件。模板文件通常使用 .html 后缀,内容可以包含静态 HTML 以及动态的 Django 模板语言。

1. 基础模板

首先,我们需要创建一个基础模板——base.html。这个模板一般包含页面的整体结构,比如头部、尾部和一些公共的元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- templates/base.html -->
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>{% block title %}我的网站{% endblock %}</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<header>
<h1>我的网站头部</h1>
<nav>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/about/">关于</a></li>
</ul>
</nav>
</header>

<main>
{% block content %}
<!-- 页面内容将放在这里 -->
{% endblock %}
</main>

<footer>
<p>版权 © 2023</p>
</footer>
</body>
</html>

2. 继承基础模板

现在,我们来创建一个特定的页面模板,比如 home.html,让它继承 base.html

1
2
3
4
5
6
7
8
9
<!-- templates/home.html -->
{% extends "base.html" %}

{% block title %}首页{% endblock %}

{% block content %}
<h2>欢迎来到我的网站</h2>
<p>这是首页的内容。</p>
{% endblock %}

在这个例子中,home.html 使用了 {% extends "base.html" %} 来继承基础模板。我们在 home.html 中重写了两个块:titlecontent

3. 创建其它页面

我们可以通过类似的方式创建其他页面,比如 about.html

1
2
3
4
5
6
7
8
9
<!-- templates/about.html -->
{% extends "base.html" %}

{% block title %}关于我们{% endblock %}

{% block content %}
<h2>关于我们</h2>
<p>这是关于我们页面的内容。</p>
{% endblock %}

4. 使用包含(include)

为了进一步复用代码,Django 还支持 include 标签。假设我们有一个 navigation.html 文件,专门用于导航条。

1
2
3
4
5
6
7
<!-- templates/navigation.html -->
<nav>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/about/">关于</a></li>
</ul>
</nav>

然后我们可以在 base.html 中包含这个导航:

1
2
3
4
<header>
<h1>我的网站头部</h1>
{% include "navigation.html" %}
</header>

5. 渲染模板

最后,我们需要在 Django 视图中渲染这些模板。以下是一个简单的视图示例:

1
2
3
4
5
6
7
8
# views.py
from django.shortcuts import render

def home(request):
return render(request, 'home.html')

def about(request):
return render(request, 'about.html')

6. 路由配置

不要忘记在 urls.py 中配置路由:

1
2
3
4
5
6
7
from django.urls import path
from .views import home, about

urlpatterns = [
path('', home, name='home'),
path('about/', about, name='about'),
]

总结

通过以上的示例,我们学习了 Django 模板的继承机制。它让我们可以轻松地创建一个统一的页面结构,同时又能根据需要自定义每个页面的内容。通过 blockinclude 的结合使用,我们能够更加灵活地管理和重用我们的模板代码。使用模板继承,编写 Django 应用将变得更加高效和便捷。

小节表单的定义与使用

小节表单的定义与使用

在Django中,表单是处理用户输入的重要工具。通过表单,用户可以输入数据,Django可以验证和处理这些数据。本文将详细介绍如何定义和使用表单,通过实际案例帮助你更好地理解这一概念。

什么是表单?

在Django中,表单主要用于获取用户输入。通过表单,我们可以:

  • 接收用户的提交数据
  • 验证数据的有效性
  • 处理和存储数据

定义表单

Django使用forms模块来定义表单。首先,我们需要导入forms模块,并创建一个表单类。

示例:创建一个简单的用户注册表单

1
2
3
4
5
6
7
# forms.py
from django import forms

class UserRegistrationForm(forms.Form):
username = forms.CharField(max_length=150, required=True)
email = forms.EmailField(required=True)
password = forms.CharField(widget=forms.PasswordInput, required=True)

在上面的代码中:

  • username 是一个字符字段,最大长度为150,并且是必填项。
  • email 是一个电子邮件字段,同样是必填的。
  • password 字段使用PasswordInput小部件,以隐藏用户输入的内容。

表单字段类型

Django提供了多种字段类型,常用的有:

  • CharField:字符字段
  • EmailField:邮箱字段
  • IntegerField:整数字段
  • BooleanField:布尔字段
  • DateField:日期字段
  • ChoiceField:选择字段

使用表单

在视图中使用表单的基本流程包括:显示表单、处理提交的数据、验证数据和返回相应的反馈。

示例:使用用户注册表单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# views.py
from django.shortcuts import render, redirect
from .forms import UserRegistrationForm

def register(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
# 处理有效数据
username = form.cleaned_data['username']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
# 这里可以将用户信息存入数据库
return redirect('success_url') # 假设你有一个成功页面
else:
form = UserRegistrationForm()

return render(request, 'register.html', {'form': form})

在这个视图中:

  • 如果请求方法是POST,我们就会创建一个表单实例,传入用户提交的数据。
  • 使用form.is_valid()方法来验证数据,如果有效,就可以通过form.cleaned_data获取清洗后的数据。
  • 如果请求是GET方法,我们则会创建一个空表单并返回给用户。

在模板中渲染表单

在HTML模板中,我们可以使用{{ form }}来直接渲染整个表单,也可以逐个渲染每个字段。

示例:渲染用户注册表单

1
2
3
4
5
6
<!-- register.html -->
<form method="post">
{% csrf_token %}
{{ form.as_p }} <!-- 一次性渲染整个表单 -->
<button type="submit">注册</button>
</form>

在模板中,使用了Django的模板语言{% csrf_token %}来防止跨站请求伪造(CSRF),并调用form.as_p方法将表单中的每个字段以段落形式渲染。

处理表单验证失败

当用户输入的数据验证失败时,我们需要给用户适当的反馈。

示例:显示错误信息

对于输入错误的字段,Django能自动处理并将错误信息返回给模板。可以在模板中这样实现:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- register.html -->
<form method="post">
{% csrf_token %}
{{ form.non_field_errors }} <!-- 非字段错误 -->
{% for field in form %}
<div>
{{ field.label }}: {{ field }}
{{ field.errors }} <!-- 字段错误 -->
</div>
{% endfor %}
<button type="submit">注册</button>
</form>

通过这种方式,我们可以显示表单字段的错误信息,帮助用户纠正输入。

总结

通过本节的学习,你已经掌握了如何在Django中定义和使用表单。表单在用户数据获取和处理上非常重要,掌握表单的使用将为你后续的开发打下良好的基础。在实际项目中,你可以根据需要创建更加复杂的表单,并结合不同的字段验证和处理逻辑。