ySJ
|
2.0/chapter16/#17 |
2010-04-23 11:01:01
|
就算你将整个<literal>django.contrib</literal>开发包删除,你依然可以使用 Django 的基础功能而不会遇到任何问题。
|
|
ySJ
|
2.0/chapter16/#18 |
2010-04-23 11:01:35
|
当 Django 开发者向框架增加新功能的时,他们会严格根据这一原则来决定是否把新功能放入<literal>django.contrib</literal>中。
|
|
ySJ
|
2.0/chapter16/#23 |
2010-04-23 11:02:22
|
请查看第6章。
|
|
ySJ
|
2.0/chapter16/#25 |
2010-04-23 11:04:12
|
<literal>admindocs</literal>:为Django admin站点提供自动文档。
|
|
ySJ
|
2.0/chapter16/#26 |
2010-04-23 11:15:36
|
本书没有介绍这方面的知识;详情请参阅Django官方文档。
|
|
ySJ
|
2.0/chapter16/#29 |
2010-04-23 11:16:18
|
参见第十四章。
|
|
ySJ
|
2.0/chapter16/#32 |
2010-04-23 11:18:31
|
本书没有介绍这方面的知识;详情请参阅Django官方文档。
|
|
ySJ
|
2.0/chapter16/#34 |
2010-04-23 11:19:18
|
<literal>contenttypes</literal> : 这是一个用于引入文档类型的框架,每个安装的Django模块作为一种独立的文档类型。
|
|
ySJ
|
2.0/chapter16/#36 |
2010-04-23 11:19:54
|
可以通过阅读源码来了解关于这个框架的更多信息,源码的位置在 <literal>django/contrib/contenttypes/</literal>。
|
|
ySJ
|
2.0/chapter16/#38 |
2010-04-23 11:20:48
|
<literal>csrf</literal> : 这个模块用来防御跨站请求伪造(CSRF)。参
|
|
ySJ
|
2.0/chapter16/#39 |
2010-04-23 11:21:02
|
见后面标题为"CSRF 防御"的小节。
|
|
ySJ
|
2.0/chapter16/#41 |
2010-04-23 11:21:36
|
<literal>databrowse</literal>:帮助你浏览数据的Django应用。
|
|
ySJ
|
2.0/chapter16/#42 |
2010-04-23 11:22:02
|
本书没有介绍这方面的知识;详情请参阅Django官方文档。
|
|
ySJ
|
2.0/chapter16/#44 |
2010-04-23 11:22:27
|
<literal>flatpages</literal> : 一个在数据库中管理单一HTML内容的模块。
|
|
ySJ
|
2.0/chapter16/#45 |
2010-04-23 11:22:35
|
参见后面标题为“Flatpages”的小节。
|
|
ySJ
|
2.0/chapter16/#48 |
2010-04-23 11:22:55
|
本书没有介绍这方面的知识;详情请参阅Django官方文档。
|
|
ySJ
|
2.0/chapter16/#47 |
2010-04-23 12:47:21
|
<literal>formtools</literal>:一些列处理表单通用模式的高级库。
|
|
ySJ
|
2.0/chapter16/#50 |
2010-04-23 12:48:57
|
<literal>gis</literal>:为Django提供GIS(Geographic Information Systems)支持的扩展。
|
|
ySJ
|
2.0/chapter16/#51 |
2010-04-23 12:50:49
|
举个例子,它允许你的Django模型保存地理学数据并执行地理学查询。
|
|
ySJ
|
2.0/chapter16/#52 |
2010-04-23 12:52:26
|
这个库比较复杂,本书不详细介绍。
|
|
ySJ
|
2.0/chapter16/#53 |
2010-04-23 12:53:05
|
请参看<reference name="http://geodjango.org/" refuri="http://geodjango.org/">http://geodjango.org/</reference>上的文档。
|
|
ySJ
|
2.0/chapter16/#58 |
2010-04-23 12:55:37
|
<literal>localflavor</literal>:针对不同国家和文化的混杂代码段。
|
|
ySJ
|
2.0/chapter16/#59 |
2010-04-23 12:56:48
|
例如,它包含了验证美国的邮编
|
|
ySJ
|
2.0/chapter16/#60 |
2010-04-23 12:57:13
|
以及爱尔兰的身份证号的方法。
|
|
ySJ
|
2.0/chapter16/#66 |
2010-04-23 12:58:40
|
参看后面的“重定向”小节。
|
|
ySJ
|
2.0/chapter16/#68 |
2010-04-23 12:58:56
|
<literal>sessions</literal> : Django 的会话框架。
|
|
ySJ
|
2.0/chapter16/#69 |
2010-04-23 12:59:11
|
参见14章。
|
|
ySJ
|
2.0/chapter16/#72 |
2010-04-23 12:59:34
|
参见13章。
|
|
ySJ
|
2.0/chapter16/#78 |
2010-04-23 13:00:51
|
参见13章。
|
|
ySJ
|
2.0/chapter16/#80 |
2010-04-23 13:05:11
|
<literal>webdesign</literal>:对设计者非常有用的Django扩展。
|
|
ySJ
|
2.0/chapter16/#81 |
2010-04-23 13:09:21
|
到编写此文是,它只包含一个模板标签<literal>{% lorem %}</literal>。详情参阅Django文档。
|
|
ySJ
|
2.0/chapter16/#81 |
2010-04-23 13:11:22
|
到编写此文时,它只包含一个模板标签<literal>{% lorem %}</literal>。详情参阅Django文档。
|
|
ySJ
|
2.0/chapter16/#90 |
2010-04-23 13:12:30
|
情景1:多站点间复用数据
|
|
ySJ
|
2.0/chapter16/#103 |
2010-04-23 13:19:00
|
Django 站点框架提供数据库表来记载哪些文章可以被关联。
|
|
ySJ
|
2.0/chapter16/#106 |
2010-04-23 13:19:43
|
情景2:把网站的名字/域名保存在一个地方
|
|
ySJ
|
2.0/chapter16/#136 |
2010-04-23 13:49:29
|
把<literal>example.com</literal>改成你自己的域名,然后通过Django admin站点或Python API来添加其他<literal>Site</literal>对象。
|
|
ySJ
|
2.0/chapter16/#140 |
2010-04-23 13:58:02
|
该变量值应当是该设置文件所支撑的站点<literal>Site</literal> 对象的数据库 ID。
|
|
ySJ
|
2.0/chapter16/#188 |
2010-04-23 14:28:07
|
正如情景二中所解释的那样,依据DRY原则(不做重复工作),你只需在一个位置储存站名和域名,然后引用当前 <literal>Site</literal> 对象的 <literal>name</literal> 和 <literal>domain</literal> 。例如:
|
|
ySJ
|
2.0/chapter16/#196 |
2010-04-23 14:29:00
|
完成这项工作的一种更加灵活(但更重量级)的方法是使用 Django 的模板系统。
|
|
ySJ
|
2.0/chapter16/#207 |
2010-04-23 14:32:27
|
如果 <literal>站点</literal> 在你的应用中扮演很重要的角色,请考虑在你的模型中使用方便的 <literal>CurrentSiteManager</literal> 。
|
|
ySJ
|
2.0/chapter16/#208 |
2010-04-23 14:33:18
|
这是一个模型管理器(见第十章),它会自动过滤使其只包含与当前站点相关联的对象。
|
|
ySJ
|
2.0/chapter16/#211 |
2010-04-23 14:33:37
|
例如:
|
|
ySJ
|
2.0/chapter16/#219 |
2010-04-23 14:39:27
|
<literal>CurrentSiteManager</literal> 是如何知道 <literal>Photo</literal> 的哪个字段是 <literal>Site</literal> 呢?缺省情况下,它会查找一个叫做 <literal>site</literal> 的字段。如果你的模型包含了名字<literal>不是</literal><literal>site</literal>的<emphasis>外键</emphasis>或者<literal>多对多</literal>关联,你需要把它作为参数传给<literal>CurrentSiteManager</literal>以显示指明。下面的模型拥有一个<literal>publish_on</literal>字段:
|
|
ySJ
|
2.0/chapter16/#224 |
2010-04-23 14:40:59
|
注意
|
|
ySJ
|
2.0/chapter16/#228 |
2010-04-23 14:46:49
|
同样,Django 的特定部分(即 Django 超级管理站点和通用视图)使用在模型中定义 的<emphasis>第一个</emphasis>管理器,因此如果希望管理站点能够访问所有对象(而不是仅仅站点特有对象),请于定义 <literal>CurrentSiteManager</literal> 之前在模型中放入 <literal>objects = models.Manager()</literal> 。
|
|
ySJ
|
2.0/chapter16/#241 |
2010-04-23 14:50:26
|
每个注释被显示时,其 <literal>site</literal> 被设置为当前的 <literal>SITE_ID</literal> ,而当通过适当的模板标签列出注释时,只有当前站点的注释将会显示。
|
|
ySJ
|
2.0/chapter16/#246 |
2010-04-23 14:52:57
|
在 syndication 框架中(参阅第 13 章), <literal>title</literal> 和 <literal>description</literal> 的模板会自动访问变量 <literal>{{ site }}</literal> ,它其实是代表当前站点的 <literal>Site</literal> 对象。
|
|
ySJ
|
2.0/chapter16/#247 |
2010-04-23 14:55:05
|
而且,如果你不指定一个合格的domain的话,提供目录URL的钩子将会使用当前“Site”对象的domain。
|
|
ySJ
|
2.0/chapter16/#249 |
2010-04-23 15:00:43
|
在权限框架中(参见十四章),视图<literal>django.contrib.auth.views.login</literal>把当前<literal>Site</literal>名字和对象分别以<literal>{{ site_name }}</literal>和<literal>{{ site }}</literal>的形式传给了模板。
|
|
ySJ
|
2.0/chapter16/#251 |
2010-04-23 15:02:04
|
Flatpages(简单页面)
|
|