为什么使用模板

通过视图可以给用户返回一些字符串等等,

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

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

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

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

模板不仅仅是一个html文件

模板文件的使用

  1.创建模板的文件夹

在项目的路径的下面创建一个名字为templates的文件夹

2. 配置模板目录

   (1)   在项目的配置文件settings.py里面,有个配置叫作  TEMPLATES (用来设置模板目录)

      TEMPLATEs中DIRS中的列表默认是为空的列表,然后在里面设置模板文件的目录路径

   (2)  在配置文件里面有BASE_DIR 用来获取项目目录的绝对路径

import os# 项目目录的绝对路径
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

然后使用功能BASE_DIR进行配置,使用os.path.join(BASE_DIR,"templates") 进行拼接

EMPLATES = [{'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',],},},
]

 使用拼接的原因是,防止项目换个目录,而导致模板文件找不到,从而导致各种错误

  (3)有多个应用时,防止模板为不混淆,可以在templates下面建立,每个应用的文件夹

           

(4) 使用模板文件

       在模板文件的某个应用的模板文件下面的创建模板,即html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>booktest的模板文件</title>
</head>
<body><h1>这是一个模板文件</h1>
</body>
</html>

① 加载模板文件

         去模板目录下面获取html文件的内容,得到一个模板对象

②定义传递的字典     

        向模板文件传递数据

③模板渲染  (注意在1.11后只能传入字典,不能传入上下文的对象)

          得到一个标准的html内容

# Create your views here.
# 1. 定义视图函数,返回HttpRequest对象
# 2. 进行url配置,建立url地址和视图的对应关系
def index(request):# 进行处理,和M和T进行交互..."""使用模板文件1. 加载模板文件,返回一个模板对象"""temp = loader.get_template("booktest/index.html")'''2. 给模板文件传递数据传递的数据通过字典的键值对形式传递不传值的话可以传一个空字典'''content = {}'''3.模板渲染:把传递的这些数据对应的位置替换成对应的值,最终返回替换后的内容,就是一个标准的html文件'''res_html = temp.render(content)'''4.返回给浏览器'''return HttpResponse(res_html)

然后访问    127.0.0.1:8000/index    就可以把模板文件进行加载然后渲染出来

   

(5) 因为每个视图函数都要用相同的步骤进行,所有系统给了一个 render() 函数实现相同的功能,

          代码更少,而且在不同视图函数进行调用就行

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader, RequestContext# Create your views here.
# 1. 定义视图函数,返回HttpRequest对象
# 2. 进行url配置,建立url地址和视图的对应关系
def index(request):# 进行处理,和M和T进行交互..."""render(),有三个参数分别为:request,template_name,context=None第一个参数为request,当前的路径第二为模板文件路径第三个为数据,没有的话可以不写或者{},context 传递参数,context为一个字典"""return render(request, "booktest/index.html", {})

模板变量的使用

   1.给模板变量传递数据

def index(request):# 进行处理,和M和T进行交互...return render(request, "booktest/index.html", {"content":"这是一个模板变量值!"})

2.   接受传过来的数据用  {{  }}   里面跟上模板变量的名字

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>booktest的模板文件</title>
</head>
<body><h1>这是一个模板文件!</h1><div>使用模板变量:{{ content }}</div>
</body>
</html>

然后刷新网页   ,值就成功传递过去了

3. 也可以传递一个列表,并且可以在模板中遍历这个列表,

 在模板中使用for循环   代码段写在  {% %}  以 {% endfor %} 在循环的结尾

在模板中编写代码段语法如下:

{%代码段%}

给模板传递数据 

def index(request):# 进行处理,和M和T进行交互...return render(request, "booktest/index.html",{"content":"这是一个模板变量值!","list":list(range(1,11))})

在模板中接收数据,使用for循环

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>booktest的模板文件</title>
</head>
<body><h1>这是一个模板文件!</h1><div>使用模板变量:{{ content }} <br/>使用列表:{{ list }} <br/>对列表进行遍历使用for循环:{% for i in list %}<li>{{ i }}</li>{% endfor %}</div>
</body>
</html>

刷新网页,查看效果

静态文件

把项目所需要的js、css、图片、以及一些静态的文件放到一个文件中

  • 在项目的根目录下面创建名为 static 的文件
  • 在系统的settings的文件中进行配置,
# 这个系统已经有了
# django是如何区分 静态资源和动态资源的呢?
# 就是通过 STATIC_URL ,在访问静态资源 http://ip:port + STATIC_URL + 文件名
# django 就会认为我们在访问静态资源,就会去静态资源文件夹中进行匹配
# STATIC_URL 是访问静态文件的url资源
STATIC_URL = '/static/'# STATICFILES_DIRS 是存放查找静态文件的目录
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')
]

应用中的apps.py(应用的配置类)

   name是app的名称,表示这个配置类加载到哪个应用的,每个配置类必须包含此属性,默认自动生成。

   verbose_name是后台管理的app的显示名称,属于用于设置该应用的直观可读的名字,此名字在django提供的Admin管理站点中会显示

from django.apps import AppConfigclass LoginConfig(AppConfig):name = 'login'verbose_name = "登录"

Django框架(8.Django中的模板文件的使用和模板变量的简单使用)相关推荐

  1. Python基于mysql+Django框架图书管理系统源代码(含mysql文件)

    项目前台和后台界面模板都是自己编写,前台采用Bootstrap框架UI,后台EasyUI框架UI,没有采用Django自动生成的那个后台管理,因为那个后台实在是太丑了,丑得惨不忍睹!整个项目主要负责图 ...

  2. Django框架(23.Django中的模板的标签、变量、过滤器和注释)

    模板 作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器.模版致力于表达外观 ...

  3. Django框架(25.Django中的模板继承以及HTML转义)

    模板继承 模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量. 典型应用:网站的头部.尾部信息. 父模板 如果发现在多个模板中某些内容相同,那就应该把这段内容定义到父模板中. ...

  4. Django框架(19.Django中获取url的参数(位置参数以及关键字参数))

    捕获url参数 进行url匹配时,把所需要的捕获的部分设置成一个正则表达式组,这样django框架就会自动把匹配成功后相应组的内容作为参数传递给视图函数. 位置参数 位置参数,参数名可以随意指定   ...

  5. Django框架(7.Django中视图,url的配置)

    视图 在Django中,通过浏览器去请求一个页面时,使用视图函数来处理这个请求的, 视图函数处理之后,要给浏览器返回页面内容 url匹配 urlpatterns 是固定写法,它的值是 列表 我们在浏览 ...

  6. Django框架(6.django后台管理/通过后台对数据表的增删改)

    1.django项目中的admin.py  即:  后台管理相关文件 使用Django提供的相关管理机制的步骤 1.本地化 语言和时区的本地化    ( 修改项目中的settings.py的文件) 2 ...

  7. Django框架(1.Django框架的简介)

    Django简介 Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计. 劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005 ...

  8. java 读取html模板文件_Java根据html模板创建 html文件

    1,写JAVA代码 public String patientsindex(HttpServletRequest request){ //获得当前项目的绝对路径 String t=Thread.cur ...

  9. 织梦的php模板文件在哪,主要模板文件与功能说明

    主要模板文件与功能说明 DedeCMS系统的模板存放在{cmspath}/templets/default. 默认风格是default,用户可自定义模版风格名称,如你在论坛下载了一套新的风格,你可以不 ...

最新文章

  1. ncurse界面编程多线程示例
  2. java question_Core Java Question List No3
  3. php错误提示:date_default_timezone_get
  4. Spring @ConfigurationProperties注解使用示例
  5. Apache服务器部署ASP.NET网站
  6. 手写一个动态代理实现,手写Proxy,手写ClassLoader,手写InvocationHandler
  7. Linux开机启动nginx
  8. VS2005项目的安装与布署,包括卸载
  9. 2022年考研数据结构_2 线性表
  10. 自定义http报头_http协议报头详解HTTP协议结构
  11. linux比较两个文件的内容,[Linux] 使用awk比较两个文件的内容
  12. AdaBoost--从原理到实现
  13. java 打印收据_使用Java打印到收据打印机时修复文本拉伸
  14. Manjaro安装deb包
  15. 使用GCC和Makefile编译c文件
  16. 【CAD.Net】第四课:添加实体类和符号表到图纸
  17. 菲尔兹奖得主丘成桐院士:数学之美与应用
  18. 第十章分治算法(大数相乘)
  19. 计算机网络 与信息安全专业就业,信息安全专业是学什么的 毕业后的就业方向有哪些...
  20. 【095期】网易二面:Kafka 为什么吞吐量大、速度快?

热门文章

  1. 华为语音解锁设置_华为手机备忘录的秘密功能
  2. springboot+springsecurity+mybatis+jwt实现单点登录(详细到爆了)
  3. 《计算机组成原理》课程设计任务书——TEC-2实验系统——微程序设计
  4. JAVA——监听器ActionListener与MouseListener执行顺序
  5. mysql binlog 权限_MySQL如何开启binlog?binlog三种模式的分析
  6. mysql 5.7 引擎_MySQL 5.7 学习:功能性能的提升
  7. 关于宽字符(C++将中文文本文件的内容输出到控制台
  8. postgresql操作
  9. weblogic部署连接池
  10. CTF——PHP审计——变量覆盖