Python笔记:Django框架11.2——Django的基本使用4:模板

问题:如何向请求者返回一个漂亮的页面呢?

肯定需要用到html、css,如果想要更炫的效果还要加入js,问题来了,这么一堆字段串要全都写到视图中,作为HttpResponse()的参数吗?这样定义就太麻烦了吧,因为定义字符串是不会出任何效果和错误的,如果有一个专门定义前端页面的地方就好了。

解决问题的技术来了:模板

在Django中,将前端的内容定义在模板中,然后再把模板交给视图调用,各种漂亮、炫酷的效果就出现了。

创建模板

首先需要在根目录下新建文件夹templates(使用pycharm新建django的时候会自带)。
之后在setting.py里面的TEMPLATES中加入templates文件夹的路径,添加后的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',
            ],
        },
    },
]
  • (Pycharm创建的Django项目也会自动添加)

为应用booktest下的视图index创建模板index.html,目录结构如下图:


定义模板

打开templtes/booktest/index.html文件,定义代码如下:



    图书列表


  

{{ title }}

{% for i in list %} {{ i }}
{% endfor %}
  • 在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的。
{{变量名}}
  • 在模板中编写代码段语法如下:
{%代码段%}
  • 上面的
{% for i in list %}
{% endfor %}

就是for循环的写法。

视图调用模板

调用模板分为三步骤:

  • 1.找到模板
  • 2.定义上下文
  • 3.渲染模板

打开booktst/views.py文件,调用上面定义的模板文件

from django.http import HttpResponse
from django.template import loader,RequestContext

def index(request):
    # 1.获取模板
    template=loader.get_template('booktest/index.html')
    # 2.定义上下文
    context=RequestContext(request,{'title':'图书列表','list':range(10)})
    # 3.渲染模板
    return HttpResponse(template.render(context))
  • 注意新版本不再需要RequestContext,只需要给context定义一个列表即可,或者使用下面的简写方式

视图调用模板简写

视图调用模板都要执行以上三部分,于是Django提供了一个函数render封装了以上代码。 方法render包含3个参数:

  • 第一个参数为request对象
  • 第二个参数为模板文件路径
  • 第三个参数为字典,表示向模板中传递的上下文数据

打开booktst/views.py文件,调用render的代码如下:

from django.shortcuts import render

def index(request):
    context={'title':'图书列表','list':range(10)}
    return render(request,'booktest/index.html',context)

打开浏览器刷新页面,显示效果如下图:


你可能感兴趣的:(Python笔记:Django框架11.2——Django的基本使用4:模板)