Django学习(3)模板定制
在Django学习(一)一首情诗中,views.py中HTML被直接硬编码在代码之中,虽然这样便于解释视图是如何工作的,但直接将HTML硬编码到视图却不算一个好主意。因为:
- 对页面设计进行的任何改变都必须对Python代码进行相应的修改,而站点设计的修改往往比底层Python代码的修改要频繁得多。
- Python代码编写和HTML设计是两项不同的工作,大多数专业的网站开发环境都将它们分配给不同的人员来完成。
- 程序员编写Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含Python又包含HTML的文件的编辑工作。
基于以上原因,Django推荐使用模板。模板(Template)是一个文本,用于分离文档的表现形式和内容。模板通常用于产生HTML.
本次分享的目标是利用Django的模板来产生一封简单的情书。这需要用到Django模板方面的知识。
先新建项目love_letter:
django-admin.py startproject love_letter
切换到该文件夹下的love_letter目录,新建letter.html文件,即Django的模板,代码如下:
<html>
<head>
<title>Love Letter</title>
</head>
<body>
<h1>Love Letter for {{ name }}</h1> <p>Dear {{ name }}:</p> <p>Now you are reading a letter from your BF. Thanks for reading it.</p> <p>We met on {{met_date}}, and today is {{today}}, so we have been together for {{days}} days.</p> <p>Now you live in {{your_city}}, and I live in {{my_city}}.
{% ifequal your_city.lower my_city.lower %}
So lucky for living in the same city!
{% else %}
What a pity for not being together!
{% endifequal %}
</p> <p>So glad to meet you! You must be the heaven-sent angel for you are
<ul>
{% for trait in traits %}
<li>{{trait}}</li>
{% endfor %}
</ul>
I'm so fascinated of you!
</p> <p>
It is now {{weather}} in {{your_city}},
{% ifequal weather 'cold'%}
take care of yourself.
{% else %}
{% ifequal weather 'hot'%}
take care of yourself.
{% else %}
nice weather, isn't it?
{% endifequal %}
{% endifequal %} Hoping for seeing you soon! May you have a pleasent day!
</p> <p>Yours Sincerely,<br/>{{ today }}<br/>{{ author }}</p> </body>
</html>
我们有必要对这个模板做解释:
- {{ name }}表示name变量,所有{{...}}里面包含的是变量。
- {% ifequal your_city.lower my_city.lower %}为标签(tag),表示if判断语句,判断两个变量是否相等,需要用{% endifequal %}来结束。
- {% for trait in traits %}为标签,表示for循环语句,traits可以为list或者set序列,需要用{% endfor %}。
- 其余代码同HTML相同。
定义好模板之后,我们应该告诉Django怎样使用这个模板,因此,需要在settings.py中的TEMPLATES设置DIRS:
这样我们就能在视图中使用该模板了。在相同的文件夹下,新建views.py,代码如下:
from django.shortcuts import render_to_response
import datetime def output(request):
c = {'name':'Rose',
'met_date': datetime.datetime(2016,5,24,18,0,0),
'today': datetime.datetime.now(),
'your_city': 'shanghai',
'my_city': 'Shanghai',
'traits': ['young and pretty', 'lovely and positive', 'warm-hearted and careful', 'independent and clever'],
'weather': 'cold',
'author': 'Jclian'
}
c['days'] = (c['today'] - c['met_date']).days
return render_to_response('letter.html', c)
其中c为字典,keys为模板中定义的变量,values可以自由定义。
最后配置好urls.py,并开启8000端口,在网页中输入localhost:8000,得到的页面如下:
参考文献:
- Django中文教程.pdf:http://download.csdn.net/download/huangzhichang13/8177581
- Django官方文档之Templates:https://docs.djangoproject.com/en/2.0/topics/templates/
Django学习(3)模板定制的更多相关文章
- django学习-6.模板templates
1.前言 首先,我们要知道html是一门静态语言,里面没法传一些动态参数,也就是一个写死的html页面. 那么,如果我们想实现在一个html页面里传入不同的参数对应的参数值,这就可以用django框架 ...
- django 学习-5 模板使用流程
首先在模板下建一个index.html <!DOCTYPE html><html><head><meta charset="utf-8" ...
- django 学习-2 模板
如何使用渲染模板的方法来显示内容. 1.创建一个项目dream django-admin.py startproject dream cd dream 再创建一个应用 python m ...
- django学习笔记-模板层
模板层 将Python嵌入到HTML中. 模板简介 将HTML硬解码到视图并不是那么完美原因如下: 对页面设计时也需要对python代码进行相应的修改,模板可以不就行python代码修改的情况下变更设 ...
- django学习--2 模板
Django 模板 在上一章节中我们使用 django.http.HttpResponse() 来输出 "Hello World!".该方式将数据与视图混合在一起,不符合 Djan ...
- Django学习day6——模板
在day4中,你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. html = "<html><body& ...
- Django学习之模板
一.常用语法 1.变量 2.Filters 3.自定义filter 4.Tags 5.csrf_token 6.注释 7.注意事项 二.母板 2.继承母板 3.块(block) 4.组件 5.静态文件 ...
- Django 学习 之 模板(html)与配置静态文件
一.模板(html) 1.模板语法之变量:语法为 {{ }} 在 Django 模板中遍历复杂数据结构的关键是句点字符, 语法:{{ var_name }} var_name 是一个变量名称,需要和 ...
- Django学习之模板层
三板斧 render,HttpResponse,redirectrender返回一个HTML页面,并且还能够给该页面传数据render内部原理: from django.template import ...
- django 学习-3 模板变量
1.vim learn/home.html <!DOCTYPE html><html><head> <title>{{title}}< ...
随机推荐
- Caused by: org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 49; 前言中不允许有内容。
今天刚开始学习mybatis时,自己去尝试使用mybatis链接数据库,操作数据局时,报了一个下面的错误 Caused by: org.xml.sax.SAXParseException; lineN ...
- 9. 使用ZooKeeper Java API编程
ZooKeeper是用Java开发的,3.4.6版本的Java API文档可以在http://zookeeper.apache.org/doc/r3.4.6/api/index.html上找到. Ti ...
- Office2016 KMS激活
Office标准版激活 一新买本子需要安装Office,闲来无事就安装了一款Office Standard 2016,网上许多激活秘钥均已过期,无法激活,无奈下选择KMS激活. KMS下载链接如下: ...
- 提高运维效率(二)桌面显示IP
运维人员远控电脑询问IP时,总要告诉用户找ip的步骤,岂不很烦? 以下方法直观地把ip地址显示在桌面上,再做个入职培训,即可提高运维效率. 1. 下载bginfo.exe软件,放到域控下的netlo ...
- nginx反向代理node.js获取客户端IP
使用Nginx做node.js程序的反向代理,会有这么一个问题:在程序中获取的客户端IP永远是127.0.0.1 如果想要拿到真实的客户端IP改怎么办呢? 一.首先配置Nginx的反向代理 proxy ...
- vue2.0与实战开发
慕课网实战 百度云 web前端实战: Node.js入门到企业Web开发中的应用 Web前端性能优化 让你的页面飞起来 前端跳槽面试必备技巧 前端JavaScript面试技巧全套 node.JS 线上 ...
- PE文件格式分析
PE文件格式分析 PE 的意思是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行文件格式.它的一些特性继承自Unix的Coff(common object ...
- Error parsing column 8 (IsRecommended=0 - SByte) Dapper查询mysql数据库可空的tinyint(1)一个错误
出错条件: 1.实体属性为bool?类型 2.对应字段为可空的tinyint(1)类型 3.该字段查询结果内即含有null,又含有正常值 google答案,两种建议: 1.修改sql语句,直接cast ...
- 自己动手编写IOC框架(三)
刚写博客浏览量第一天就有1000多人次,给了我很大的鼓舞决定熬夜再写一篇.对于前两篇来说无非就是使用dtd验证xml,然后解析xml,和IOC的核心还是差的很远,相信很多小伙伴们都感觉看得不过瘾了,这 ...
- Spring之bean二生命周期
上一博客主要学习了下bean的配置.注入.自定义属性编辑器,今天来熟悉bean的生命周期.在开发中生命周期是一个很常见的名词,基本每种编程语言都能找到与它关联的.关于bean的生命周期我在网上也找了好 ...