四、template模板_templates文件夹-程序员宅基地

技术标签: python  django  Django  后端  

模板

之前的案例中,能够返回简单的字符串信息给浏览器。那如果想要返回html页面给浏览器该怎么做呢?

当然,我们可以这么写:

def index(request):
    return HttpResponse('<h1 style="color:red">我是硬编码的</h1>')

这样显然,不便维护,也不高效。

django提供了一套模板渲染的机制,将html源码写在模板文件中,然后通过方法将数据渲染后返回给客户端。

模板路径设置

在项目根目录下创建一个templates文件夹用来存放模板文件,然后将这个文件的路径配置到配置项TEMPLATESDIRS中。

# study_django/settings.py
...
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [str(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',
            ],
        },
    },
]

注意要填写模板文件夹的绝对路径,通过代码str(BASE_DIR / 'templates')可以动态生成。

其实我们还有一个操作没有做,我们需要用pycharm将templates这个文件夹设置为当前项目的模板文件。设置成功之后,我们在输入html路径的时候就会有提示。

 

 

模板渲染

模板渲染本质上就是将数据替换到模板文件的插槽中,和字符串替换一样。

模板变量

最简单的渲染是将变量替换到模板中。

在模板中,模板变量的语法是:

{
   { 变量名 }}

templates文件中再创建一个crm文件夹,然后在其中创建一个index.html,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>{
   { msg }}</p>
</body>
</html>

添加了一个模板变量msg,这个变量需要从视图传递一个对应的变量进行替换。修改crm.index视图如下:

# crm/views.py

from django.http import HttpResponse
from django.template.loader import get_template


def index(request):
    msg = '我是首页面'
    t = get_template('crm/index.html')      # 获取模板
    html = t.render(context={'msg': msg})   # 渲染html
    return HttpResponse(html)               # 返回响应

上面的代码非常简单,做了如下工作:

  1. 在视图中定义了一个变量msg
  2. 然后根据路径crm/index.html获取对应的模板,
  3. 再将变量msg传递给模板进行渲染,
  4. 最后将渲染好的html返回。

访问这个视图,返回页面如下:

上面的代码还可以通过一个快捷函数简化:

from django.shortcuts import render

def index(request):
    msg = '我是首页面'
    return render(request, 'crm/index.html', context={'msg': msg})

render函数的第一个参数是请求request,第二个参数是模板路径,第三个参数context是要传递给模板的数据,是一个字典,其中key是模板上对应的变量名,值是实际要渲染的数据。

模板变量的解析规则

模板变量按照如下流程解析替换:

  1. 当模板引擎遇到模板变量时,它会计算该变量,并将其替换为结果
  2. 当模板引擎在变量中遇到.时(x.y的形式),它会按以下顺序尝试查找:
  3. 字典键值查找
  4. 属性或方法查找
  5. 数字索引查找
  6. 如果结果是可调用的,则调用它时不带参数。调用结果成为模板值。

模板标签

只能简单渲染变量显然不满足需求,django的模板系统中还提供了模板标签来实现更多的渲染逻辑,例如判断,循环等。

下面列出几个常用的模板标签:

for

循环浏览数组中的每个项目,使该项目可以在上下文变量中可用。例如,要显示student_list中提供的学生列表:

<ul>
{% for student in student_list %}
    <li>{
   { student.name }}</li>
{% endfor %}
</ul>

if

{% if %} 标签会判断给定的变量,当变量为 True 时(比如存在、非空、非布尔值 False),就会输出块内的内容:

{% if student_list %}
    学生的数量: {
   { student_list|length }}
{% else %}
    没有学生
{% endif %}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Sean_0819/article/details/128709296

智能推荐

数据结构与算法 - 07 二分搜索与贪婪_基础结果搜索数据结构贪心-程序员宅基地

文章浏览阅读250次。二分搜索 Binary Search 定义 又叫 折半搜索 在有序数组中查找某一特定元素的搜索算法 前提:数组必须有序 优点 时间复杂度:O(lgn),非常高效 又叫 对数搜索 缺点 要求待查找的数组或区间是排好序的 应用 数据是排好序的,且不会经常变动 代码 递归 非递归 贪婪 Greedy 定义 每一步都采用在当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法 优点 从局部考_基础结果搜索数据结构贪心

【个人网站开发 · 记录四】开发阶段一 —— 原生VuePress开发(上)手动搭建个人博客网站的详细记录_vuepress创建项目模板还是手动-程序员宅基地

文章浏览阅读929次。文章目录一. 第一部分1.1 xxx1.2 xxx二. 第二部分2.1 yyy2.2 yyy前言部分一. 第一部分1.1 xxx1.2 xxx二. 第二部分2.1 yyy2.2 yyy_vuepress创建项目模板还是手动

kali系统简单入门_kali快速入门-程序员宅基地

文章浏览阅读997次。kali基础操作命令作用及格式_kali快速入门

word 此文件来自其它计算机,问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……...-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏6次。最近,在打开下载的office文档(包括word、excel、ppt等)时候,总是无法直接打开,错误提示如下:无论是邮件中的还是别的网站下载的,均提示该错误。后来搜索相关资料发现,修改其文件属性即可打开(属性---》解除锁定)。但是也不能每次下载文件都去修改呀,太费事了。原因分析:这一切都要从WindowsXP的SP2说起,在SP2之前,大概是2004年吧,由于当时互联网得到了一个比较大的发展,导..._此文件来自其他计算机可能被阻止

谷歌chorme浏览器版本降级_如何将googlecharme的版本降低-程序员宅基地

文章浏览阅读3.8k次。升级了谷歌最新版不习惯,如何降级版本未完待续。。电脑中的Chrome谷歌浏览器升级到了最新版本,但是有种种的不适应,如何能恢复到之前的旧版本呢?我们来看看操作步骤,而且无需卸载重装。怎么恢复Chrome 之前版本?1、关闭Chrome进程,打开chrome.exe所在目录,在Win8下的路径是(X:\Users\用户名\AppData\Local\Google\Chrom..._如何将googlecharme的版本降低

通过EDID信息,获取电脑显示器序列号_edid-decode查询显示器序列号-程序员宅基地

文章浏览阅读5k次。某天突发奇想,能不能通过软件把电脑主机和显示器绑定,于是研究了下,发现需要获取显示器的DDC信息,通过驱动层面获取难度比较大,网上查询了下,linux的driver里video中有相关代码段,通过一直可以搞定,不过没有尝试,最后通过注册表发现了一个键值也能达到目的,HKEY_LOCAL_MACHINE->SYSTEM->ControlSet001->Enum->Display中的第一项就是_edid-decode查询显示器序列号

随便推点

maven在pom中写dependency注入依赖包却无提示的解决方法_pom文件修改 maven没有提示import-程序员宅基地

文章浏览阅读2.8k次。问题描述当你在pom.xml写需要的依赖包时,你发现不弹出提示,你或许直接去https://mvnrepository.com/找依赖的代码,但本地仓库有的情况下,不弹出提示写起来真的很难受,尤其是你记不住你本地仓库版本的时候问题解决打开IDEA,Settings-Build,Execution,Deployment----Bulid Tools----Maven----D:/tools/..._pom文件修改 maven没有提示import

使用inotify-tools监控文件夹或文件的变动-程序员宅基地

文章浏览阅读4.8k次。文章目录一、前言1、什么是inotify和inotify-tools2、检查系统是否支持inotify二、安装使用inotify-tools1、获取安装包2、编译安装3、脚本编写4、使用一、前言1、什么是inotify和inotify-toolsInotify是一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。inotify-tools包括一个C库和一组命令行工具,可在命令_inotify

基于集成运放心电放大器设计(原创)_心电放大器设计仿真图-程序员宅基地

文章浏览阅读4.6k次,点赞10次,收藏100次。原创作者:einyboy or alert最近在看美剧《危机边缘》关于边缘科学的案件,科技控可以看一下,但建议不在吃东西的时候看。想像力是创造的思想源头,动手能力则是创造的车床。 自认为是没有想像力的那类,只能发挥动手能力了。心电测量简介图1 心电极接线图如图1心电测试一般使用3个心电极进行测量,各个电极的说明如下:RA: Right Arm缩写,右手电极LA: L..._心电放大器设计仿真图

hbase问题记录_regionserver not connect-程序员宅基地

文章浏览阅读743次。1. [hbase]hadoop 异常记录 ERROR: org.apache.hadoop.hbase.MasterNotRunningException: Retried 7 times #---------------------------------------------------------------------------------------------------_regionserver not connect

CAS单点登录原理解析(转载+补充)_cas的过滤器分析-程序员宅基地

文章浏览阅读241次。转自博客园前言前言1. 什么是单点登录单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。前言1.2 ..._cas的过滤器分析

写给入门看的Git的安装配置和使用_java git 安装配置-程序员宅基地

文章浏览阅读498次。1. 安装(Windows)1.1 首先需要下载 git 的安装包1.2 下载完成之后双击安装包进行安装,安装比较简单,一路 next 就行1.3 安装完成之后我们鼠标右击和开始菜单中都可以找到 git注:Git Bash 打开为 Linux 的命令行(使用Linux的命令),Git CMD 使用的是 windows 下的 CMD命令,Git GUI是Git提供的一个界面化的操作面板,按照自己喜好方式选择,个人建议 Git Bash,但是 git 命令是统一的无需纠结。1.4 测试安装打开G_java git 安装配置