Skip to content

Django - 创建视图

在 Django 中,视图(view)是一个 Python 函数或类,它接收一个 Web 请求(web request)并返回一个 Web 响应(web response)。这个响应可以是网页的 HTML 内容、一个重定向、一个 404 错误、一个 XML 文档、一个 JSON 响应、一个图像,或者浏览器可以显示的任何其他内容。视图包含应用程序的业务逻辑(business logic)。

视图通常在你的 Django 应用内的 views.py 文件中定义。

让我们在 myapp/views.py 文件中创建一个简单的视图,它返回一个基本的 HTML 问候语:

myapp/views.py
from django.http import HttpResponse
def hello(request):
html_content = "<h1>Welcome to my app!</h1>"
return HttpResponse(html_content)

在这个视图中:

  • 我们从 django.http 导入了 HttpResponse。
  • 我们定义了一个名为 hello 的函数,它接受一个参数:request,这是一个代表传入 Web 请求的 HttpRequest 对象。
  • 该函数返回一个 HttpResponse 对象,其中包含我们想要显示的 HTML 内容。
  • 要通过 URL 访问此视图,你需要在 urls.py 文件中将一个 URL 模式(URL pattern)映射到它(这将在 URL 映射章节中介绍)。

直接在视图中硬编码 HTML 通常是一种不好的做法。Django 的模板系统(template system)允许你将表示层(HTML)与逻辑层(Python)分离。让我们修改视图以使用模板。

首先,创建一个模板文件。按照约定,应用 myapp 的模板通常放在 myapp/templates/myapp/ 目录下。创建 myapp/templates/myapp/hello.html 文件:

myapp/templates/myapp/hello.html
<!DOCTYPE html>
<html>
<head>
<title>Hello Page</title>
</head>
<body>
<h1>{{ greeting }}</h1>
</body>
</html>

注意:请确保你的 settings.py 文件在 TEMPLATES 设置中包含了 APP_DIRS=True,以便 Django 能够自动找到应用模板。

现在,更新 myapp/views.py 中的视图,以使用 render 快捷函数:

myapp/views.py
from django.shortcuts import render
def hello(request):
context = {'greeting': 'Welcome to my app, rendered via template!'}
return render(request, 'myapp/hello.html', context)

在这里:

  • 我们从 django.shortcuts 导入了 render。
  • 我们创建了一个 context 字典。这个字典中的键将成为模板中可用的变量。
  • render 函数接收 request 对象、模板文件的路径以及 context 字典。
  • 它使用 context 渲染模板并返回一个 HttpResponse 对象。

视图经常需要处理通过 URL 传递的参数。例如,根据 ID 显示某个特定项。

让我们创建一个视图,它接受来自 URL 的一个数字:

myapp/views.py
from django.http import HttpResponse
def show_number(request, number):
html_content = f"<h1>Displaying number: {number}!</h1>"
return HttpResponse(html_content)

这个视图现在接受一个额外的参数 number。如何从 URL 中捕获这个参数是在 urls.py 中定义的。我们使用了 f-string (Python 3.6+) 来实现更简洁的字符串格式化。

Django 还支持基于类的视图(Class-Based Views),它们有助于组织代码,通过继承实现重用,并更有效地处理常见模式(如显示表单或对象列表)。Django 提供的通用 CBVs(Generic CBVs)特别有用(将在后面介绍)。

进一步阅读:Django 视图文档