ySJ
|
2.0/chapter09/#656 |
2010-04-16 17:00:09
|
模板加载器,也就是 <literal>TEMPLATE_LOADERS</literal> 中的每一项,都要能被下面这个接口调用:
|
|
ySJ
|
2.0/chapter09/#654 |
2010-04-16 16:58:50
|
比如:你可以从数据库中,或者利用Python的绑定直接从Subversion库中,更或者从一个ZIP文档中加载模板。
|
|
ySJ
|
2.0/chapter10/#119 |
2010-04-19 12:50:51
|
例如:
|
|
ySJ
|
2.0/chapter09/#643 |
2010-04-16 16:56:40
|
(注意函数的第一个参数 <emphasis>必须</emphasis> 是 <literal>context</literal> 。)
|
|
ySJ
|
2.0/chapter09/#635 |
2010-04-16 16:54:54
|
为了解决这个问题,Django为包含标签提供了一个 <literal>takes_context</literal> 选项。
|
|
ySJ
|
2.0/chapter09/#631 |
2010-04-16 16:54:09
|
Python 2.4装饰器语法也能正常工作,所以我们可以这样写:
|
|
ySJ
|
2.0/chapter09/#618 |
2010-04-16 16:52:54
|
需要注意的是,我们只需要返回字典类型的结果就行了,不需要返回更复杂的东西。
|
|
ySJ
|
2.0/chapter09/#610 |
2010-04-16 16:51:44
|
让我们来写一个能够产生指定<literal>作者</literal>对象的书籍清单的标签。
|
|
ySJ
|
2.0/chapter09/#600 |
2010-04-16 16:47:21
|
参数两边的引号(如果有的话)已经被截掉了,所以我们会接收到一个普通Unicode字符串。
|
|
ySJ
|
2.0/chapter09/#591 |
2010-04-16 16:46:20
|
在Python 2.4中,也可以使用装饰器语法:
|
|
ySJ
|
2.0/chapter09/#586 |
2010-04-16 16:45:47
|
为了简化这类标签,Django提供了一个帮助函数<literal>simple_tag</literal>。这个函数是<literal>django.template.Library</literal>的一个方法,它接受一个只有一个参数的函数作参数,把它包装在render函数和之前提及过的其他的必要单位中,然后通过模板系统注册标签。
|
|
ySJ
|
2.0/chapter09/#687 |
2010-04-16 17:11:21
|
(这点在第四章的"特殊的Python命令提示行"一节解释过。)但是当你想在非Django应用中使用模版系统的时候,采用环境变量并不方便,因为你可能更想同其余的应用一起配置你的模板系统,而不是处理配置文件并通过环境变量指向他们。
|
|
ySJ
|
2.0/chapter09/#691 |
2010-04-16 17:13:47
|
你可能会考虑至少要设置 <literal>TEMPLATE_DIRS</literal> (如果你打算使用模板加载器), <literal>DEFAULT_CHARSET</literal> (尽管默认的 <literal>utf-8</literal> 编码相当好用),以及 <literal>TEMPLATE_DEBUG</literal> 。所有可用的选项在附录D中都有详细描述,所有以 <literal>TEMPLATE_</literal> 开头的选项都可能使你感兴趣。
|
|
ySJ
|
2.0/chapter10/#64 |
2010-04-19 10:53:09
|
当要向一个产品设置表(或者说是model)添加一个字段的时候,要使用的技巧是利用Django不关心表里是否包含model里所没有的列的特性。
|
|
ySJ
|
2.0/chapter10/#56 |
2010-04-19 10:50:41
|
Django<emphasis>不</emphasis>关心数据库表中是否存在未在模型中定义的列。
|
|
ySJ
|
2.0/chapter10/#54 |
2010-04-19 10:49:34
|
当你第一次用Django的数据库API请求表中不存在的字段时会导致错误(就是说,它会在运行时出错,而不是编译时)。
|
|
ySJ
|
2.0/chapter10/#49 |
2010-04-19 10:47:42
|
这段将解释了具体怎么做:
|
|
ySJ
|
2.0/chapter10/#49 |
2010-04-19 10:42:31
|
这段将解释了怎么做。
|
|
ySJ
|
2.0/chapter10/#48 |
2010-04-19 10:42:09
|
如果你新增或修改数据模型里的字段,或是删除了一个数据模型,你需要手动在数据库里进行相应的修改。
|
|
ySJ
|
2.0/chapter10/#47 |
2010-04-19 10:36:16
|
在我们在第5章介绍 <literal>syncdb</literal> 这个命令时, 我们注意到 <literal>syncdb</literal>仅仅创建数据库里还没有的表,它 <emphasis>并不</emphasis> 对你数据模型的修改进行同步,也不处理数据模型的删除。
|
|
ySJ
|
2.0/chapter10/#43 |
2010-04-19 10:34:53
|
这里,就像使用 <literal>ForeignKey</literal>字段一样,属性名<literal>book_set</literal>是在数据模型(model)名后追加<literal>_set</literal>。
|
|
ySJ
|
2.0/chapter10/#39 |
2010-04-19 10:33:36
|
反向查询也可以。
|
|
ySJ
|
2.0/chapter10/#35 |
2010-04-19 10:31:30
|
多对多和外键工作方式相同,只不过我们处理的是<literal>QuerySet</literal>而不是模型实例。
|
|
ySJ
|
2.0/chapter10/#20 |
2010-04-19 10:20:27
|
当你获取一个<literal>ForeignKey</literal> 字段时,你会得到相关的数据模型对象。
|
|
ySJ
|
2.0/chapter10/#16 |
2010-04-19 10:19:48
|
但是,在之前有一件我们没提及到的是表现为<literal>ForeignKey</literal> 或 <literal>ManyToManyField</literal>的关联对象字段,它们的作用稍有不同。
|
|
ySJ
|
2.0/chapter10/#12 |
2010-04-19 10:12:49
|
如我们在第5章的讲解,获取数据库对象的特定字段的值只需直接使用属性。
|
|
ySJ
|
2.0/chapter10/#9 |
2010-04-19 10:07:55
|
先让我们回忆一下在第五章里的关于书本(book)的数据模型:
|
|
ySJ
|
2.0/chapter10/#5 |
2010-04-19 10:07:34
|
在这章里,我们将向你介绍Django在这方面的一些更高级功能。
|
|
ySJ
|
2.0/chapter09/#584 |
2010-04-16 16:37:20
|
我们给定了一个格式化字符串,然后它返回一个字符串形式的时间。
|
|
ySJ
|
2.0/chapter09/#439 |
2010-04-16 13:21:32
|
IfEqual节点:
|
|
ySJ
|
2.0/chapter09/#212 |
2010-04-15 19:09:15
|
<literal>&</literal>被转换为<literal>&</literal> |
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:47:31
|
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:47:00
|
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:46:53
|
username
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:46:36
|
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:45:29
|
username
|
|
ySJ
|
2.0/chapter09/#179 |
2010-04-15 18:44:27
|
类似的,如果用户名包含<literal></literal>,就像这样:username
|
|
ySJ
|
2.0/chapter09/#179 |
2010-04-15 18:44:13
|
类似的,如果用户名包含<literal></literal>,就像这样:username
|
|
ySJ
|
2.0/chapter09/#179 |
2010-04-15 18:43:47
|
类似的,如果用户名包含<literal></literal>,就像这样:username
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:41:14
|
username
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:40:57
|
username
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:40:46
|
name
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:40:38
|
|
|
ySJ
|
2.0/chapter09/#179 |
2010-04-15 18:39:41
|
类似的,如果用户名包含<literal></literal>,就像这样:
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:48:38
|
username
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:48:55
|
username
|
|
ySJ
|
2.0/chapter09/#181 |
2010-04-15 18:53:12
|
username
|
|
ySJ
|
2.0/chapter09/#212 |
2010-04-15 19:08:41
|
<literal>&</literal>被转换为<literal>&</literal> |
|
ySJ
|
2.0/chapter09/#208 |
2010-04-15 19:08:11
|
<literal>'</literal>(单引号)被转换为<literal>'</literal> |
|
ySJ
|
2.0/chapter09/#210 |
2010-04-15 19:07:53
|
<literal>"</literal>(双引号)被转换为<literal>"</literal> |
|