django基础入门(6)-模板

如果我们的视图想给用户返回漂亮的页面,就需要在python代码中编写很多html css的代码。这会导致一些问题的出现, 例如:

1. 任何页面的改动会牵扯到Python代码的改动, 网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便;

2. 后台Python代码与设计HTML是不同的工作,页面设计人员应该编辑Python代码,他们应该与HTML打交道;

3. 程序员写后台程序同时页面设计人员写HTML模板会更高效,而不是一个人等待另一个人编辑同样的文件.

因此,使用Django的模板系统分离设计和Python代码会更干净更易维护.

作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入.

Django 项目可以配置一个或多个模板引擎。Django 的模板系统自带内建的后台 ——称为Django 模板语言(DTL),以及另外一种流行的Jinja2。

Django 模板语言 是Django 原生的模板系统。尽管它闭门造车,并且偏重某些方面,但是它仍然是一个优秀的模版库。如果没有特别紧急的理由选择另外一种后台,你应该使用DTL。Django 中包含模板的标准应用,例如django.contrib.admin,都使用DTL。

模板简言之:就是混合了模板语言的html文件.

1. 配置模板

如何让视图找到模板文件? 我们需要配置模板的路径,以便djangon模板引擎能够找到并加载模板文件.在和news_app同级目录下创建文件夹templates目录,用于存放模板文件。

打开project/settings.py文件,将templates目录配置到django中,相关内容如下:

TEMPLATES = [
    {
        'BACKEND':'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

参数解释:

backend: 使用何种模板引擎;

dirs: 定义了一个目录列表,模板引擎按照列表顺序在这些目录中查找模板文件;

app_dirs: 是否进入已安装应用中查找模板. 每种模板引擎都定义了一个默认的名称作为搜索模板的子目录. 例如django为它自己的模板引擎指定的是 ‘templates’ ,为jinja2指定的名字是‘jinja2’.

2. 使用模板

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',
            ],
        },
    },
]
DIRS哪一行为配置模板的根目录,以后模板就会在这个目录下去搜索。配置模板搜索路径, 当获得模板时候从此目录下读取模板.
编写视图函数,django.template.loader 定义了get_template()函数以加载模板。get_template()函数使用给定的名称加载模板并返回一个Template对象.

get_template()函数返回的Template对象,该类型对象有个render(context=None)函数,可用于对Template类型模板进行渲染(渲染是指使用context 数据对模板插值并返回生成的字符串).

修改我们news_app目录下的views.py模块中的index视图函数如下:

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader

def index(request):

    # 从配置路径中加载模板
    template = loader.get_template("app_news/index.html")
    # 创建上下文(需要插入到模板中的数据)
    context = {"title": "news title", "content": "news contents!"}
    # 渲染模板
    new_template = template.render(context)

    return HttpResponse(new_template)

以上实现过于复杂,还有更简单方式:

from django.shortcuts import render

def index(request):
    context = {"title": "news title", "content": "news contents!"}
    return render(request, "app_news/index.html", context)
在templates目录下创建app_news目录,在app_news目录中创建模板文件(html文件),index.html,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table>
    <tr><td>新闻标题:</td><td>{{title}}</td></tr>
    <tr><td>新闻内容:</td><td>{{content}}</td></tr>
</table>
</body>
</html>
执行命令,python manage.py runserver启动测试服务器,在浏览器输入localhost:8000/index/,看到显示结果为:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值