• Index

模版

Reads: 784 Edit

使用 Django 开发 Web 应用,应该遵循 MVC 思想,需要将业务逻辑和视图进行分离。Django 模板就是 MVC 中的 View 部分。

本章将介绍 Django 模板的使用,模板的内容是纯文本,用于分离视图的表现形式和内容。

1. 模板应用范例

我们接着上一章节的项目将在 blog 目录底下创建 templates 目录并建立 codebaoku.html文件,整个目录结构如下:

(secker381) xinpingdeMacBook-Pro:blog xinping$ tree
.
├── blog
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-38.pyc
│   │   ├── settings.cpython-38.pyc
│   │   ├── urls.cpython-38.pyc
│   │   └── wsgi.cpython-38.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
└── templates
    └── codebaoku.html

codebaoku.html 文件代码如下:

blog/templates/codebaoku.html 文件代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>codebaoku</title>
</head>
<body>
<h1>{{ hello }}</h1>
</body>
</html>

从模板中我们知道变量使用了双括号。

接下来我们需要向Django说明模板文件的路径,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 为 [os.path.join(BASE_DIR, 'templates')],如下所示:

blog/blog/settings.py 文件代码:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],       # 修改位置
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

我们现在修改 views.py,增加一个新的对象,用于向模板提交数据:

blog/blog/views.py 文件代码:

from django.shortcuts import render

def codebaoku(request):
    context = {}
    context['hello'] = 'Hello World!'
    return render(request, 'codebaoku.html', context)

可以看到,我们这里使用 render 来替代之前使用的 HttpResponse。render 还使用了一个字典 context 作为参数。

context 字典中元素的键值 hello 对应了模板中的变量 {{ hello }}。

再次访问 http://127.0.0.1:8000/codebaoku , 可以看到页面:

Snip20220420_18

这样我们就完成了使用模板来输出数据,从而实现数据与视图分离。

接下来我们将具体介绍模板中常用的语法规则。


Comments

Make a comment

www.ultrapower.com ,王硕的博客,专注于研究互联网产品和技术,提供中文精品教程。 本网站与其它任何公司及/或商标无任何形式关联或合作。
  • Index
aaaaa