Templates

2020-06-15 17:40 更新

Templates

加上 HTML / CSS & 动态内容

上一章的例子,只是很简单的显示一行字串。让我们加上一些 HTML/CSS 美化网页,并动态显示每次进来这个页面的时间:

# trips/views.py

from datetime import datetime
from django.http import HttpResponse

def hello_world(request):
    output = """
        <!DOCTYPE html>
        <html>
            <head>
            </head>
            <body>
                Hello World! <em style="color:LightSeaGreen;">{current_time}</em>
            </body>
        </html>
    """.format(current_time=datetime.now())

    return HttpResponse(output)
  1. 多行字串:

"""...""" 或是 '''...''' (三个双引号或三个单引号) 是字串的多行写法,这裡我们使用它表达 HTML,并维持原有的缩排。

  1. 显示目前时间:

    为了显示动态内容,我们 import datetime 时间模组,并用datetime.now()取得现在的时间。

  2. 字串格式化:

    使用 format() 格式化字串,将 datetime.now() 产生的值,代入 {current_time} 在字串中的位置。

现在启动 web server ,连至 http://127.0.0.1:8000/hello/ 后,会发现网页不再是纯文字。除了加上了一些样式外,也会显示当下的时间。

你可以重新整理网页,试试看时间有没有改变

hello-world-html-string.png

第一个 Template

在前一个例子,我们把 HTML/CSS 放在 View function 裡。但在实务上,我们会将前端的程式码独立出来,放在 templates 资料夹裡。不仅增加可读性,也方便与设计师或前端工程师分工。

Template 资料夹

首先建立 Template 资料夹。开启终端机 (如果不想关闭 web server,可以再开新一个新的终端机视窗),并确认目前所在位置为 djangogirls/mysite/

新增一个名为 templates 的资料夹`:

mkdir templates

设定 Templates 资料夹的位置

建立好资料夹以后,我们需要修改mysite/settings.py,加上TEMPLATE_DIRS

# mysite/settings.py

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates').replace('\\', '/'),
)

建立第一个 Template

新增档案 templates/hello_world.html ,并将之前写在 View function 中的 HTML 複製到 hello_world.html

mysite
├── mysite
├── templates
│   └── hello_world.html
├── trips
└── manage.py

为了区别,我们做了一些样式上的调整:

<!-- hello_world.html -->

<!DOCTYPE html>
<html>
    <head>
        <title>I come from template!!</title>
        <style>
            body {
               background-color: lightyellow;
            }
            em {
                color: LightSeaGreen;
            }
        </style>
    </head>
    <body>
        <h1>Hello World!</h1>
        <em>{{ current_time }}</em>
    </body>
</html>

在 Template 中显示变数

以上 Template 中,有个地方要特别注意:

<em>{{ current_time }}</em>

仔细比较,可以发现变数 current_time 的使用方式与之前不同,在这裡用的是两个大括号。

{{<variable_name>}} 是在 Django Template 中显示变数的语法。

其它 Django Template 语法,我们会在后面的章节陆续练习到

render

最后,将 hello_world 修改如下:

# trips/views.py

from datetime import datetime
from django.shortcuts import render

def hello_world(request):
    return render(request,
                  'hello_world.html',
                  {'current_time': datetime.now()})

我们改成用 render 这个 function 产生要回传的 HttpResponse 物件。

这次传入的参数有:

  • request -- HttpRequest 物件
  • template_name -- 要使用的 Template
  • dictionary -- 包含要新增至 Template 的变数

Render :产生 HttpResponse 物件。

render(request, template_name, dictionary)

大功告成

HTML 程式码独立成 Template 后,程式也变得简洁许多了。

重新载入 http://127.0.0.1:8000/hello/,你会发现画面有了小小的改变:

HelloWorld From Template

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号