当前位置:K88软件开发文章中心网站服务器框架django → 文章内容

Django 集成的子框架

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-25 14:19:27

 呢?缺省情况下,它会查找一个叫做 site 的字段。如果你的模型包含了名字不是site的_外键_或者多对多关联,你需要把它作为参数传给CurrentSiteManager以显示指明。下面的模型拥有一个publish_on字段:from django.db import modelsfrom django.contrib.sites.models import Sitefrom django.contrib.sites.managers import CurrentSiteManagerclass Photo(models.Model): photo = models.FileField(upload_to='/home/photos') photographer_name = models.CharField(max_length=100) pub_date = models.DateField() publish_on = models.ForeignKey(Site) objects = models.Manager() on_site = CurrentSiteManager('publish_on')如果试图使用 CurrentSiteManager 并传入一个不存在的字段名, Django 将引发一个 ValueError 异常。注意即便是已经使用了 CurrentSiteManager ,你也许还想在模型中拥有一个正常的(非站点相关)的 管理器 。正如在附录 B 中所解释的,如果你手动定义了一个管理器,那么 Django 不会为你创建全自动的objects = models.Manager() 管理器。同样,Django 的特定部分(即 Django 超级管理站点和通用视图)使用在模型中定义 的_第一个_管理器,因此如果希望管理站点能够访问所有对象(而不是仅仅站点特有对象),请于定义 CurrentSiteManager 之前在模型中放入 objects = models.Manager() 。Django如何使用多站点框架尽管并不是必须的,我们还是强烈建议使用多站点框架,因为 Django 在几个地方利用了它。 即使只用 Django 来支持单个网站,你也应该花一点时间用 domain 和 name 来创建站点对象,并将 SITE_ID 设置指向它的 ID 。以下讲述的是 Django 如何使用多站点框架:在重定向框架中(见后面的重定向一节),每一个重定向对象都与一个特定站点关联。 当 Django 搜索重定向的时候,它会考虑当前的 SITE_ID 。在注册框架中,每个注释都与特定站点相关。 每个注释被显示时,其 site 被设置为当前的 SITE_ID ,而当通过适当的模板标签列出注释时,只有当前站点的注释将会显示。在 flatpages 框架中 (参见后面的 Flatpages 一节),每个 flatpage 都与特定的站点相关联。 创建 flatpage 时,你都将指定它的 site ,而 flatpage 中间件在获取 flatpage 以显示它的过程中,将查看当前的 SITE_ID 。在 syndication 框架中(参阅第 13 章), title 和 description 的模板会自动访问变量 {{ site }} ,它其实是代表当前站点的 Site 对象。 而且,如果你不指定一个合格的domain的话,提供目录URL的钩子将会使用当前“Site”对象的domain。在权限框架中(参见十四章),视图django.contrib.auth.views.login把当前Site名字和对象分别以{{ site_name }}和{{ site }}的形式传给了模板。Flatpages(简单页面)尽管通常情况下总是搭建运行数据库驱动的 Web 应用,有时你还是需要添加一两张一次性的静态页面,例如“关于”页面,或者“隐私策略”页面等等。 可以用像 Apache 这样的标准Web服务器来处理这些静态页面,但却会给应用带来一些额外的复杂性,因为你必须操心怎么配置 Apache,还要设置权限让整个团队可以修改编辑这些文件,而且你还不能使用 Django 模板系统来统一这些页面的风格。这个问题的解决方案是使用位于 django.contrib.flatpages 开发包中的 Django 简单页面(flatpages)应用程序。该应用让你能够通过 Django 管理站点来管理这些一次性的页面,还可以让你使用 Django 模板系统指定它们使用哪个模板。 它在后台使用Django模型,这意味着它把页面项别的数据一样保存在数据库中,也就是说你可以使用标准Django数据库API来存取页面。简单页面以它们的 URL 和站点为键值。 当创建简单页面时,你指定它与哪个URL以及和哪个站点相关联 。 (有关站点的更多信息,请查阅”多站点“一节。)使用简单页面安装简单页面应用程序必须按照下面的步骤:添加 'django.contrib.flatpages' 到 INSTALLED_APPS 设置。django.contrib.flatpages依赖django.contrib.sites,所以确保它们都在INSTALLED_APPS里。将 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' 添加到 MIDDLEWARE_CLASSES设置中。运行 manage.py syncdb 命令在数据库中创建必需的两个表。简单页面应用程序在数据库中创建两个表: django_flatpage 和 django_flatpage_sites 。 django_flatpage只是将 URL 映射到标题和一段文本内容。 django_flatpage_sites 是一个多对多表,用于关联某个简单页面以及一个或多个站点。该应用捆绑的 FlatPage 模型在 django/contrib/flatpages/models.py 进行定义,如下所示:from django.db import modelsfrom django.contrib.sites.models import Siteclass FlatPage(models.Model): url = models.CharField(max_length=100, db_index=True) title = models.CharField(max_length=200) content = models.TextField(blank=True) enable_comments = models.BooleanField() template_name = models.CharField(max_length=70, blank=True) registration_required = models.BooleanField() sites = models.ManyToManyField(Site)让我们逐项看看这些字段的含义:url : 该简单页面所处的 URL,不包括域名,但是包含前导斜杠 (例如 /about/contact/ )。title : 简单页面的标题。 框架不对它作任何特殊处理。 由你通过模板来显示它。content : 简单页面的内容 (即 HTML 页面)。 框架不对它作任何特殊处理。 由你负责使用模板来显示。enable_comments : 是否允许该简单页面使用评论。 框架不对它作任何特殊处理。 你可在模板中检查该值并根据需要显示评论窗体。template_name : 用来解析该简单页面的模板名称。 这是一个可选项;如果未指定模板或该模板不存在,系统会退而使用默认模板 flatpages/default.html 。registration_required : 是否注册用户才能查看此简单页面。 该设置项集成了 Djangos 验证/用户框架,该框架于第十四章详述。sites : 该简单页面放置的站点。 该项设置集成了 Django 多站点框架,该框架在本章的“多站点”一节中有所阐述。你可以通过 Django 超级管理界面或者 Django 数据库 API 来创建简单页面。 要了解更多内容,请查阅“添加、修改和删除简单页面”一节。一旦简单页面创建完成,

上一页  [1] [2] [3] [4] [5] [6]  下一页


Django 集成的子框架