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的模板,代码如下:

 1 <html>
 2 <head>
 3 <title>Love Letter</title>
 4 </head>
 5 <body>
 6 <h1>Love Letter for {{ name }}</h1>
 7
 8 <p>Dear {{ name }}:</p>
 9
10 <p>Now you are reading a letter from your BF. Thanks for reading it.</p>
11
12 <p>We met on {{met_date}}, and today is {{today}}, so we have been together for {{days}} days.</p>
13
14 <p>Now you live in {{your_city}}, and I live in {{my_city}}.
15 {% ifequal your_city.lower my_city.lower %}
16 So lucky for living in the same city!
17 {% else %}
18 What a pity for not being together!
19 {% endifequal %}
20 </p>
21
22 <p>So glad to meet you! You must be the heaven-sent angel for you are
23 <ul>
24 {% for trait in traits %}
25 <li>{{trait}}</li>
26 {% endfor %}
27 </ul>
28 I‘m so fascinated of you!
29 </p>
30
31 <p>
32 It is now {{weather}} in {{your_city}},
33 {% ifequal weather ‘cold‘%}
34 take care of yourself.
35 {% else %}
36 {% ifequal weather ‘hot‘%}
37 take care of yourself.
38 {% else %}
39 nice weather, isn‘t it?
40 {% endifequal %}
41 {% endifequal %}
42
43 Hoping for seeing you soon! May you have a pleasent day!
44 </p>
45
46 <p>Yours Sincerely,<br/>{{ today }}<br/>{{ author }}</p>
47
48 </body>
49 </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,代码如下:

 1 from django.shortcuts import render_to_response
 2 import datetime
 3
 4 def output(request):
 5 c = {‘name‘:‘Rose‘,
 6 ‘met_date‘: datetime.datetime(2016,5,24,18,0,0),
 7 ‘today‘: datetime.datetime.now(),
 8 ‘your_city‘: ‘shanghai‘,
 9 ‘my_city‘: ‘Shanghai‘,
10 ‘traits‘: [‘young and pretty‘, ‘lovely and positive‘, ‘warm-hearted and careful‘, ‘independent and clever‘],
11 ‘weather‘: ‘cold‘,
12 ‘author‘: ‘Jclian‘
13 }
14 c[‘days‘] = (c[‘today‘] - c[‘met_date‘]).days
15 return render_to_response(‘letter.html‘, c)

其中c为字典,keys为模板中定义的变量,values可以自由定义。
  最后配置好urls.py,并开启8000端口,在网页中输入localhost:8000,得到的页面如下:



参考文献:

  1. Django中文教程.pdf:http://download.csdn.net/download/huangzhichang13/8177581
  2. Django官方文档之Templates:https://docs.djangoproject.com/en/2.0/topics/templates/
时间: 2024-08-08 06:30:41

Django学习(3)模板定制的相关文章

django学习之模板系统

django模板系统学习笔记之for 在for标签里面,有以下知识点: forloop.counter forloop.counter0 forloop.first forloop.last forloop.revcounter forloop.revcounter0 froloop.parentloop empty 下面我们举例学习: 首先到我们的工程目录下,敲入: python manage.py shell # forloop.counter from django.template im

django 学习-2 模板

如何使用渲染模板的方法来显示内容. 1.创建一个项目dream django-admin.py   startproject   dream cd  dream    再创建一个应用 python manage.py  startapp  learn 2.把创建的应用-learn加入到 settings.INSTALLED_APPS中 INSTALLED_APPS = (     'django.contrib.admin',     'django.contrib.auth',     'dj

六、Django学习:模板嵌套

blog_list.html,blog_detail.html,blogs_with_type.html这3个文件有大量的重复代码,如果把这些重复的代码提取到另外一个html文件中,也就是使用模板嵌套,就可以达到复用的目的. 在blog templates文件夹下面建立一个新的文件base.html,并将重复的html代码复制进去. <!DOCTYPE html> <html> <head> <meta charset="utf-8">

django 学习-3 模板变量

1.vim learn/home.html <!DOCTYPE html><html><head>        <title>{{title}}</title></head><body><hl>hello {{user}}</hl></body></html>花括号里加入的就是模板变量 2.vim /learn/views.py def  home(request):   

django 学习-4 模板标签

1.第一个标签是 if 标签 vim  learn/home.html <!DOCTYPE html><html><head>        <title>{{title}}</title></head><body>{% if  user  %}        <li>name: {{user.name}} <li>{%else%}用户不存在{%endif%}</body></ht

Django学习笔记(二)—— 模板

疯狂的暑假学习之 Django学习笔记(二)-- 模板 参考: <The Django Book> 第四章 一.模板基础知识 1.模板是如何工作的 用 python manage.py shell 启动交互界面(因为manage.py 保存了Django的配置,如果直接python启动交互界面运行下面代码会出错) 输入下面代码 >>> from django import template >>> t = template.Template('My name

Django学习日记04_模板_overview

通过Django中的模板,使得设计人员和网站管理有一个对接的接口,实现网页设计和逻辑的分离,因此,模板会处理大量的文本解析内容,django中内部使用了高效的引擎来完成模板解析. 模板设置 在使用模板前,需要对django进行配置,在项目目录的setting.py中, TEMPLATES = [? ? {? ? ? ? 'BACKEND': 'django.template.backends.django.DjangoTemplates',? ? ? ? 'DIRS': [? ? ? ? ? ?

django book学习笔记——模板高级进阶

1.RequestContext和Context处理器 当你不想在一系例模板中都明确指定一些相同的变量时,你应该使用 RequestContext .例如: from django.template import loader, RequestContext def custom_proc(request):     "A context processor that provides 'app', 'user' and 'ip_address'."     return {     

[Django学习]模板

模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用 模板包含 HTML的静态部分 动态插入内容部分 Django模板语言,简写DTL,定义在django.template包中 由startproject命令生成的settings.py定义关于模板的值: DIRS定义了一个目录列表,模板引擎按列表顺序