ySJ
|
2.0/chapter09/#417 |
2010-04-16 13:15:13
|
标签要比过滤器复杂些,因为标签几乎能做任何事情。
|
|
ySJ
|
2.0/chapter09/#412 |
2010-04-16 13:14:46
|
下面是一个完整的模板库的例子,它包含一个 <literal>cut</literal> 过滤器:
|
|
ySJ
|
2.0/chapter09/#410 |
2010-04-16 13:13:37
|
如果你想第二个例子那样不使用 <literal>name</literal> 参数,那么Django会把函数名当作过滤器的名字。
|
|
ySJ
|
2.0/chapter09/#407 |
2010-04-16 13:11:21
|
如果你使用的是Python 2.4或者更新的版本,你可以使用装饰器<literal>register.filter()</literal>:
|
|
ySJ
|
2.0/chapter09/#407 |
2010-04-16 13:10:39
|
如果你使用的是Python 2.4或者更新的版本,你可以把 <literal>register.filter()</literal>作一个装饰器:
|
|
ySJ
|
2.0/chapter09/#398 |
2010-04-16 13:09:33
|
当你定义完过滤器后,你需要用 <literal>Library</literal> 实例来注册它,这样就能通过Django的模板语言来使用了:
|
|
ySJ
|
2.0/chapter09/#391 |
2010-04-16 13:06:28
|
下面是一个可以用来去掉变量值空格的过滤器例子:
|
|
ySJ
|
2.0/chapter09/#386 |
2010-04-16 13:05:36
|
如果出现错误,应该返回一个原始输入或者空字符串,这会更有意义。
|
|
ySJ
|
2.0/chapter09/#385 |
2010-04-16 13:04:45
|
而且不能触发异常,它们都应该静静地失败。
|
|
ySJ
|
2.0/chapter09/#384 |
2010-04-16 13:04:16
|
过滤器函数应该总有返回值。
|
|
ySJ
|
2.0/chapter09/#382 |
2010-04-16 13:03:51
|
例如,在过滤器 <literal>{{ var|foo:"bar" }}</literal> 中 ,过滤器 <literal>foo</literal> 会被传入变量 <literal>var</literal> 和默认参数 <literal>bar</literal>。
|
|
ySJ
|
2.0/chapter09/#356 |
2010-04-16 13:01:36
|
如果你写了一个不和任何特定模型/视图关联的模板库,那么得到一个仅包含 <literal>templatetags</literal> 包的Django应用程序包是完全正常的。
|
|
ySJ
|
2.0/chapter09/#354 |
2010-04-16 13:00:33
|
这是一个安全特性;它可以让你在一台电脑上部署很多的模板库的代码,而又不用把它们暴露给每一个Django安装。
|
|
|
2.0/chapter09/#436 |
2010-04-16 12:17:14
|
文本节点
|
|
ySJ
|
2.0/chapter09/#349 |
2010-04-16 11:03:58
|
第二个文件的名字稍后将用来加载标签。
|
|
ySJ
|
2.0/chapter09/#356 |
2010-04-16 11:02:56
|
如果你编写了一个不和任何特定模型/视图关联的模板库,那么通常情况下你会得到一个仅包含 <literal>templatetags</literal> 包的Django应用程序包。
|
|
ySJ
|
2.0/chapter09/#370 |
2010-04-16 11:00:14
|
<literal>django/template/defaultfilters.py</literal> 和 django/template/defaulttags.py 。django.contrib中的某些应用程序也包含模板库。
|
|
ySJ
|
2.0/chapter09/#366 |
2010-04-16 10:59:06
|
注意
|
|
ySJ
|
2.0/chapter09/#363 |
2010-04-16 10:58:56
|
所以,请在你的模块的顶部插入如下语句:
|
|
ySJ
|
2.0/chapter09/#362 |
2010-04-16 10:58:13
|
作为合法的标签库,模块需要包含一个名为<literal>register</literal>的模块级变量。这个变量是<literal>template.Library</literal>的实例,是所有注册标签和过滤器的数据结构。
|
|
ySJ
|
2.0/chapter09/#362 |
2010-04-16 10:57:36
|
作为合法的标签库,模块需要包含一个名为<literal>register</literal>的模块机变量。它是<literal>template.Library</literal>的实例,是所有注册标签和过滤器的数据结构。
|
|
ySJ
|
2.0/chapter09/#358 |
2010-04-16 10:47:38
|
需要了解的是:<literal>{%load%}</literal>语句是通过指定的Python模块名而不是应用名来加载标签/过滤器的。
|
|
ySJ
|
2.0/chapter09/#356 |
2010-04-16 10:45:23
|
如果你打算写一个不和任何特定模型/视图关联的模板库,那么一个仅包含 <literal>templatetags</literal> 包的Django应用程序包就是很普遍的了。
|
|
ySJ
|
2.0/chapter09/#344 |
2010-04-16 10:20:08
|
例如:
|
|
ySJ
|
2.0/chapter09/#340 |
2010-04-16 10:19:37
|
我们稍后会解释这一点。
|
|
ySJ
|
2.0/chapter09/#339 |
2010-04-16 10:19:30
|
无论你采用何种方式,请确保把你的应用添加到 <literal>INSTALLED_APPS</literal> 中。
|
|
ySJ
|
2.0/chapter09/#337 |
2010-04-16 10:18:52
|
我们更推荐使用后者,因为你的filter可能在后来的工程中有用。
|
|
ySJ
|
2.0/chapter09/#335 |
2010-04-16 10:18:16
|
第一,决定模板库应该放在哪个Django应用下。
|
|
ySJ
|
2.0/chapter09/#331 |
2010-04-16 10:16:07
|
不管是写自定义标签还是过滤器,第一件要做的事是创建<strong>模板库</strong>(Django能够导入的基本结构)。
|
|
ySJ
|
2.0/chapter09/#323 |
2010-04-16 10:06:56
|
既然你已经对模板系统的内幕多了一些了解,让我们来看看如何使用自定义的代码来扩展这个系统吧。
|
|
xbwee
|
2.0/chapter14/#54 |
2010-04-16 10:02:30
|
你需要使用 <literal>HttpResponse</literal>对象的 <literal>set_cookie()</literal>方法。
|
|
xbwee
|
2.0/chapter14/#54 |
2010-04-16 10:00:51
|
你需要使用<literal>HttpResponse</literal>对象的<1>set_cookie()<2>方法
|
|
xbwee
|
2.0/chapter14/#55 |
2010-04-16 09:58:41
|
这儿有个基于 <literal>GET</literal> 参数来设置 <literal>favorite_color</literal>
cookie的例子:
|
|
xbwee
|
2.0/chapter12/#621 |
2010-04-16 09:54:01
|
可以自由选择阅读。
|
|
ySJ
|
2.0/chapter09/#299 |
2010-04-15 19:54:06
|
对 <literal>INSTALLED_APPS</literal> 中的每个应用,这个加载器会查找<literal>templates</literal> 子目录。
|
|
ySJ
|
2.0/chapter09/#296 |
2010-04-15 19:53:24
|
<literal>django.template.loaders.filesystem.load_template_source</literal> : 这个加载器根据 <literal>TEMPLATE_DIRS</literal> 的设置从文件系统加载模板。它默认是可用的。
|
|
ySJ
|
2.0/chapter09/#287 |
2010-04-15 19:51:48
|
如果模板都不存在,将会触发<literal>TemplateDoesNotExist</literal>异常。
|
|
ySJ
|
2.0/chapter09/#286 |
2010-04-15 19:51:10
|
它会返回列表中存在的第一个模板。
|
|
ySJ
|
2.0/chapter09/#285 |
2010-04-15 19:49:47
|
<literal>django.template.loader.select_template(template_name_list)</literal> : <literal>select_template</literal> 很像 <literal>get_template</literal> ,不过它是以模板名称的列表作为参数的。
|
|
ySJ
|
2.0/chapter09/#273 |
2010-04-15 19:47:47
|
这点对来自变量本身的数据不起作用。
|
|
ySJ
|
2.0/chapter09/#274 |
2010-04-15 19:46:46
|
如果必要,变量内容会自动转义,因为它们不在模板作者的控制下。
|
|
ySJ
|
2.0/chapter09/#273 |
2010-04-15 19:44:38
|
来源于变量本身的数据不受影响。
|
|
ySJ
|
2.0/chapter09/#265 |
2010-04-15 19:43:47
|
这是由于字符常量完全由模板作者决定,因此编写模板的时候他们会确保文本的正确性。
|
|
ySJ
|
2.0/chapter09/#264 |
2010-04-15 19:42:39
|
所有字符常量没有经过转义就被插入模板,就如同它们都经过了safe过滤。
|
|
ySJ
|
2.0/chapter09/#259 |
2010-04-15 19:42:06
|
过滤器参数里的字符串常量的自动转义
|
|
ySJ
|
2.0/chapter09/#257 |
2010-04-15 19:38:03
|
当自动转意开启时,使用escape过滤器似乎会两次转意数据,但其实没有任何危险。因为escape过滤器不作用于被转意过的变量。
|
|
ySJ
|
2.0/chapter09/#256 |
2010-04-15 19:37:02
|
如果你正在编写一个模板而不知道是否要关闭自动转意,那就为所有需要转意的变量添加一个escape过滤器。
|
|
ySJ
|
2.0/chapter09/#254 |
2010-04-15 19:36:08
|
基于Pyhton的开发者(编写VIEWS视图和自定义过滤器)只需要考虑哪些数据不需要被转意,适时的标记数据,就可以让它们在模板中工作。
|
|
ySJ
|
2.0/chapter09/#248 |
2010-04-15 19:29:28
|
由于在base模板中自动转意被关闭,所以在child模板中自动转意也会关闭.因此,在下面一段HTML被提交时,变量greeting的值就为字符串Hello!
|
|
ySJ
|
2.0/chapter09/#244 |
2010-04-15 19:26:39
|
auto-escaping 标签的作用域不仅可以影响到当前模板还可以通过include标签作用到其他标签,就像block标签一样。
|
|