国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Django > Django入门指南09-templates模板引擎

Django入门指南09-templates模板引擎

Django

头像

Python

2019-11-21 14:01:484843浏览 · 0收藏 · 0评论

注:本文为 《一个完整的Django入门指南》系列教程(中文版)第9节,你可以查看该教程的完整目录。

Django 模板引擎设置

在manage.py所在的目录创建一个名为 templates的新文件夹:

myproject/

 |-- myproject/

 |    |-- boards/

 |    |-- myproject/

 |    |-- templates/   <-- 这里

 |    +-- manage.py

 +-- venv/

在templates文件夹中,创建一个名为home.html的HTML文件:

templates/home.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Boards</title>
  </head>
  <body>
    <h1>Boards</h1>
{% for board in boards %}
      {{ board.name }} <br>
    {% endfor %}
</body>
</html>

在上面的例子中,我们混入了原始HTML和一些特殊标签 {% for ... in ... %} 和 {{ variable }} 。它们是Django模板语言的一部分。上面的例子展示了如何使用 for遍历列表对象。{{ board.name }}会在 HTML 模板中会被渲染成版块的名称,最后生成动态HTML文档。

在我们可以使用这个HTML页面之前,我们必须告诉Django在哪里可以找到我们应用程序的模板。

打开myproject目录下面的settings.py文件,搜索TEMPLATES变量,并设置DIRS 的值为 os.path.join(BASE_DIR, 'templates'):

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',
            ],
        },
    },
]

本质上,刚添加的这一行所做的事情就是找到项目的完整路径并在后面附加“/templates”

我们可以使用Python shell进行调试:

python manage.py shell
from django.conf import settings
settings.BASE_DIR
'/Users/vitorfs/Development/myproject'
import os
os.path.join(settings.BASE_DIR, 'templates')
'/Users/vitorfs/Development/myproject/templates'

看到了吗?它只是指向我们在前面步骤中创建的templates文件夹。

现在我们可以更新home视图:

boards/views.py
from django.shortcuts import render
from .models import Board
def home(request):
    boards = Board.objects.all()
    return render(request, 'home.html', {'boards': boards})

生成的HTML:

68747470733a2f2f73696d706c6569736265747465727468616e636f6d706c65782e636f6d2f6d656469612f7365726965732f626567696e6e6572732d67756964652f312e31312f706172742d322f626f617264732d686f6d65706167652d72656e6465722e706e67.png

我们可以table表示替换,改进HTML模板:

templates/home.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Boards</title>
  </head>
  <body>
    <h1>Boards</h1>
<table border="1">
      <thead>
        <tr>
          <th>Board</th>
          <th>Posts</th>
          <th>Topics</th>
          <th>Last Post</th>
        </tr>
      </thead>
      <tbody>
        {% for board in boards %}
          <tr>
            <td>
              {{ board.name }}<br>
              <small style="color: #888">{{ board.description }}</small>
            </td>
            <td>0</td>
            <td>0</td>
            <td></td>
          </tr>
        {% endfor %}
      </tbody>
    </table>
  </body>
</html>

68747470733a2f2f73696d706c6569736265747465727468616e636f6d706c65782e636f6d2f6d656469612f7365726965732f626567696e6e6572732d67756964652f312e31312f706172742d322f626f617264732d686f6d65706167652d72656e6465722d322e706e67.png

下一节:Django入门指南10-主页的请求测试

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

老师含紧一点H边做边走| 蜜桃| BUBBLE| 我的女上司| 电视剧在线观看免费| 成全影视大全免费追剧大全 | 我把刘姨俩腿扛在肩上是哪一集的 | 《交换:完美的邻居》3| 《卻望1973》娃娃脸| 7777777亚洲和欧洲尺码表| 泳装秀| 宝贝今天可不可以不带小雨伞 | 《魅魔之耻》1~4集免费看| 日韩AV无码-区二区三区96| 太太你想丈夫被开除吧| 国产 欧美一区二区三区| 两男吮她的花蒂和奶水视频| 日本大片又大又好看的PPT| 《再来一次好吗》免费观看| 白色变态蕾丝超薄开档连身袜| (NP、高H、纯肉)高H高辣| 老人玩小处雌女视频的意义| 《尼姑也疯狂》完整版| 三亚私人高清影院品牌加盟电话| 日韩AV| 女大馒头图片10张| 《乳牛牧场的奶牛娘》动浸| 乡村玉米地周婶的小说叫什么名字 | 迷你裙| 英语班长乖乖挽起裙子怎么 | 韩剧妻子的背叛| 我寄宿在妈妈闺蜜家电视剧| 和妈妈做了怎么办心理咨询| 三女片免费观看电视剧杨贵妃传| 《交换做爰》在线观看| YSL水蜜桃86满十八岁会黑吗.| 国产精品高潮呻吟久久A片小说 | 女人吃精子的好处与功效| 免费观看已满十八岁电视剧高清版 | 妈妈总是晚上装睡配合孩子| B站未满十八岁可以接广告吗20..