Django学习笔记之——Templates

模板
~~~~
顾名思意,就是一个通用的文档格式,等待填充动态的数据,形成完整的文档。
在Django里,模板通常用于制定HTML文档,但是它还可以用于任何文本格式。

如下为模板的示例:
templates/home.html
____________________________
<html>
<body>
<h1>Hello!</h1>
<p>My name is {{name}}.</p>
<p>Age: {{age}}.</p>
</body>
</html>
-----------------------------
用{{变量名}}表示会被动态赋值的变量

views.py
______________________________________________________
from django.http import HttpResponse
from django.template import loader, Context

def home(request):
    t = loader.get_template('home.html')
    #c = Context({'name':'Hevake Lee', 'age':26})
    c = Context()
    c['name'] = 'Hevake Lee'
    c['age'] = 26 
    content = t.render(c) # Template用Context生成正文
    return HttpResponse(content)
------------------------------------------------------
Context可以像dict那么访问。

如果说上面的过程太多,也可以用render_to_response()简化过程。
________________________________________________
from django.http import HttpResponse
from django.shortcuts import render_to_response

def home(request):
    response = render_to_response('home.html', 
            {'name':'Hevake Lee', 'age':26})
    return response
------------------------------------------------
render_to_response(template_file, context_dict),第一个参数是模板文件名称,
是相对于app_name/templates/的名称。第二个参数是正文字典,指定模板中的变量对
应的对象。

注意:转给模板的对象,在render()时都会被str(object)成字符串后替换模板中的变
量。如果发现变量显示不出来,请检查一下传入的对象是否实现__unicode__()之类的
转换函数。

模板过滤器
~~~~~~~~~~
模板框架可以通过叫过滤器(filter)的机制来对context变量进一步处理。

如下:
_________________________________
<ul>
{% for string in string_list %}
    <li>{{ string|lower }}</li>
{% endfor %}
</ul>
---------------------------------
用管道符"|",与Linux的管理有类似的意义。

默认的filter定义在 django/template/defaultfilters.py 中。
如下为lower()过滤器的定义:
_________________________
def lower(value):
    return value.lower()
-------------------------
lower接收一个源始的数据,返回一个处理后的数据。

lower是没有带参数的过滤器,也有带参数的。
比如truncatechars,它能限定字符显示长度,对于超出长度的字符用省略号表示。
如:"ABCDEFG",如果限定为5个,那么就是"AB..."
templates/truncate.html
________________________________
<p>{{text|truncatechars:5}}</p>
--------------------------------
filter的参数是以冒号":"开始。上面表示限制字符个数为5.

views.py
_______________________________________________________________________
def truncate(request):
    response = render_to_response('truncate.html', {'text':'ABCDEFGH'})
    return response
-----------------------------------------------------------------------
访问得到:
<p>AB...</p>

我们看一下filter truncatechars的定义:
_________________________________________
def truncatechars(value, arg):
    length = int(arg)
    return Truncator(value).chars(length)
-----------------------------------------
上面例子转入的value="ABCDEFGH", arg=5

看到这里,我们也就能理解filter究竟是怎么回事儿了。

控制标签
~~~~~~~~
除了{{变量名}}之外,还有控制逻辑的标签,它们都是{% xxxx %}格式的。
{% for item in list_or_tupe %} ... {% endfor %}

{% if %} ... {% endif %}
{% ifequal %} ... {% endifequal %}

{% block block_name %} ... {% endblock %}
{% extends file_name %}

{% include file_name %}

for语句
~~~~~~~
for语句中提供一个局部变量{{forloop}},它可以提供许多有用的信息。如:
{{forloop.first}},boolean,表示是否是第一个元素
{{forloop.last}},boolean,表示是否是最后一个元素
{{forloop.counter}},int,表示循环计数:1,2,3...
{{forloop.counter0}},int,表示循环计数:0,1,2...

block与extends
~~~~~~~~~~~~~~
{%block block_name%}...{%endblock%}中间的部分叫block。
{%extends "file_name"%}表示当前这个模块继承于file_name这个模板。
block的特性是,如果有其它的模板extends该模板,如有同名的block,那么就会用新
的block替代旧的block。这个有些类似C++里的类继承,子类可以重写父类的虚函数。

比如:
base.html
______________________________________
<html><body>
<p>{%block abc%}Base Page{%endblock%}</p>
</body></html>
--------------------------------------
定义了abc这个block。

extend.html
______________________________________
{%extends "base.html"%}
{%block abc%}Extend Page{%endblock%}
--------------------------------------
extend.html继承于base.html,并重新定义了block abc。

模板base.html生成的html:
__________________
<html><body>
<p>Base Page</p>
</body></html>
------------------
对应的extend.html生成的html为:
__________________
<html><body>
<p>Extend Page</p>
</body></html>
------------------

include包含
~~~~~~~~~~~
{%include "file_name"%}
这很像C/C++里的#inlcude,也像shell中的source,就是将指定文件的内容替换该语
句。

注:extend与include指令能接受字符串也能接受变量。这样就可以让模板动态地由上
下文决定要包含或继承于哪个模块了。

时间: 2024-10-30 18:14:20

Django学习笔记之——Templates的相关文章

Django学习笔记

1. 学习历程 从学了Python以来,我都一直想着用它来做点什么.从开始用python来写简单的工具脚本,然后再是网络信息抓取程序. 听说可以用Python来做网站,所以我了解了一下web.py与Django.第一次接触Django,由于没有网络方面的基础,所以没弄两下就放弃了. 后来,我研究了一下Python自来的SimpleHTTPServer,然后读懂了CGIHTTPServer,才对Web的实质有了了解. 在这个基础上,我再次重拾Django.这次,终于学会了. 原来它是那么的美妙!

Django学习笔记之——Forms

前面学习的都只是如何显示数据,但一直没有关于如何响应用户提交的数据.表单,是在web中,用户与服务器交互的重要途径. import django.formsform django import forms之间的区别是什么? form在Django中扮演的角色有:*显示form*验证用户提交的数据 form的定义~~~~~~~~~~ form的定义与model的定义非常相似:____________________________________________from django import

Django学习笔记之——Start

1. 安装 下载源码文件: Django-1.6.10.tar.gz 解压后生成目录:Django-1.6.10 进入目录 $ sudo python setup.py install 就完成安装了. 2. 创建工程 执行: django-admin.py startproject <工程名> 完成后会在当前目录下生成<工程名>,比如mysite,的目录.在该目录下会有: . |-- manage.py `-- mysite |-- __init__.py |-- settings

django学习笔记(3)

Part 3: Views and templates ====> Write your first view$ edit polls\views.py from django.http import HttpResponse def index(request):    return HttpResponse("Hello, world. You're at the polls index.") $ edit polls\urls.py from django.conf.url

django学习笔记(4)

Part 4: Forms and generic views ====> Write a simple form$ edit polls\templates\polls\detail.html <h1>{{ question.question_text }}</h1> {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} <

django学习笔记(1)

Django 特点 强大的数据库功能     用python的类继承,几行代码就可以拥有一个丰富,动态的数据库操作接口(API),如果需要你也能执行SQL语句 自带的强大的后台功能     几行简单的代码就让你的网站拥有一个强大的后台,轻松管理你的内容! 优雅的网址     用正则匹配网址,传递到对应函数,随意定义,如你所想! 模板系统     强大,易扩展的模板系统,设计简易,代码,样式分开设计,更容易管理. 缓存系统     与memcached或其它的缓存系统联用,更出色的表现,更快的加载

Django学习笔记之——Models

Django里的模型是对数据库对表的一次封装,是应用业务与数据之间的桥梁. 1. 模型的Fields 在上一节,我们在mysite/blog/models.py中创建了BlogPost这个Model. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=150) body = models.TextField() timestamp = models.Date

Django学习笔记之——Urls

UrlConf模块感觉就像是"路由",它分析请求的路径,并请求派送给匹配的view去处理 打开mysite.urls.py文件,如下:_____________________________________________________from django.conf.urls import patterns, include, url from views import home import blog.urls urlpatterns = patterns('',    url

Django学习笔记之——Views

在views中使用HttpResponse~~~~~~~~~~~~~~~~~~~~~~~~~ 每个view函数最终返回的都是一个HttpResponseBase.HttpResponse是HttpResponse-Base中最常用的一种.用法如下:_____________________________________________________________________from django.http import HttpResponse ## 最简单的view,直接返回正文de