Django有一个可选的“简单页面”的应用 它可以让你存储简单的扁平化结构的HTML内容在数据库中,你可以通过Django的管理界面和一个Python API处理要管理内容。
一个浮动页面是一个简单的包含有URL,标题和内容的对象。 使用它作为一次性的,特殊用途的页面,比如“关于我们”或者“隐私政策”的页面,那些你想要保存在数据库,但是你又不想开发一个自定义的Django应用。
一个简单的页面应用程序可以使用自定义模板或者默认模板,系统的单页面模板。 它可以和一个或多个站点相关联。
如果您希望将内容放在自定义模板中,该内容字段可能会任意的留下空白。
这里有一些基于Django的简单页面的示例:
按照下面这些步骤,安装单页面的应用
通过向您的INSTALLED_APPS
添加'django.contrib.sites'
,安装sites framework
另外,请确保您已将SITE_ID
正确设置为设置文件所代表的网站的ID。 这通常是1
(即SITE_ID = 1
重新使用sites框架来管理多个网站,它可以是不同网站的ID。
将'django.contrib.flatpages'
添加到您的INSTALLED_APPS
设置。
然后:
在URLconf中添加条目。 像这样:
urlpatterns = [
url(r'^pages/', include('django.contrib.flatpages.urls')),
]
要么:
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
添加到您的MIDDLEWARE
设置中。manage.py migrate
。manage.py migrate
在数据库中创建两个表:django_flatpage
和django_flatpage_sites
。 django_flatpage
是一个简单的查找表,只是将URL映射到标题和一堆文本内容。
django_flatpage_sites
将平面页面与网站相关联。
有多种方法可以将平面网页纳入您的URLconf。 您可以将特定路径专用于平面页面:
urlpatterns = [
url(r'^pages/', include('django.contrib.flatpages.urls')),
]
您还可以将其设置为“总线”模式。 在这种情况下,将模式放置在其他url模式的末尾非常重要:
from django.contrib.flatpages import views
# Your other patterns here
urlpatterns += [
url(r'^(?P<url>.*/)$', views.flatpage),
]
警告
如果您将APPEND_SLASH
设置为False
,则必须删除catchall模式中的斜杠,否则不会匹配尾部斜杠。
另一个常见的设置是为一组有限的已知网页使用平面网页,并对网址进行硬编码,因此您可以使用url
模板标记来引用它们:
from django.contrib.flatpages import views
urlpatterns += [
url(r'^about-us/$', views.flatpage, {'url': '/about-us/'}, name='about'),
url(r'^license/$', views.flatpage, {'url': '/license/'}, name='license'),
]
FlatpageFallbackMiddleware
可以完成所有的工作。
FlatpageFallbackMiddleware T0> ¶ T1>
每次任何Django应用程序引发404错误,此中间件检查flatpages数据库的请求的URL作为最后手段。
具体来说,它检查具有给定URL的平面页面,其中具有与SITE_ID
设置相对应的站点ID。
如果找到匹配,则遵循此算法:
flatpages/default.html
。flatpage
,这是平面对象。 它在呈现模板时使用RequestContext
。如果结果网址引用有效的平面网页,则中间件将仅添加尾部斜杠和重定向(通过查看APPEND_SLASH
设置)。 重定向是永久的(301状态码)。
如果它没有找到匹配,请求继续照常处理。
中间件仅针对404s激活 - 不是500秒或任何其他状态代码的响应。
Flatpages将不应用视图中间件
由于FlatpageFallbackMiddleware
仅在网址解析失败并生成404后才应用,因此返回的响应将不应用任何view middleware方法。 只有通过正常URL解析成功路由到视图的请求才应用视图中间件。
请注意,MIDDLEWARE
的顺序很重要。 通常,您可以将FlatpageFallbackMiddleware
放在列表的结尾。 这意味着它将在处理响应时运行,并确保任何其他响应处理中间件可以看到真正的平面响应而不是404。
有关中间件的更多信息,请阅读middleware docs。
确保您的404模板工作正常
请注意,FlatpageFallbackMiddleware
只会在另一个视图成功生成404响应时执行。
如果另一个视图或中间件类尝试生成404,但最终会引发异常,则响应将变为HTTP 500(“内部服务器错误”),并且FlatpageFallbackMiddleware
将不会尝试提供平面页。
如果您已激活自动Django管理界面,您应该在管理索引页上看到一个“Flatpages”部分。 在编辑系统中的任何其他对象时编辑平铺页。
FlatPage
型号有contrib.flatpages
不使用的enable_comments
字段,但对您的项目或第三方可能会有用应用。 它不会出现在管理界面中,但您可以通过为FlatPage
注册自定义ModelAdmin
来添加它:
from django.contrib import admin
from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib.flatpages.models import FlatPage
from django.utils.translation import ugettext_lazy as _
# Define a new FlatPageAdmin
class FlatPageAdmin(FlatPageAdmin):
fieldsets = (
(None, {'fields': ('url', 'title', 'content', 'sites')}),
(_('Advanced options'), {
'classes': ('collapse', ),
'fields': (
'enable_comments',
'registration_required',
'template_name',
),
}),
)
# Re-register FlatPageAdmin
admin.site.unregister(FlatPage)
admin.site.register(FlatPage, FlatPageAdmin)
简单页面 T0> ¶ T1>
平铺页由标准的Django model表示,它位于django / contrib / flatpages / models.py中。 您可以通过Django database API访问平面对象。
检查重复的平面网址。
如果您通过自己的代码添加或修改广告页,则可能需要检查同一网站中的重复的平展页网址。 admin中使用的flatpage窗体执行此验证检查,可以从django.contrib.flatpages.forms.FlatpageForm
导入并在您自己的视图中使用。
默认情况下,通过模板flatpages/default.html
呈现平铺页,但您可以覆盖特定平面页:在管理中,标题为“高级选项”的折叠字段集(单击将其展开)包含用于指定模板名称的字段。 如果您通过Python API创建平面网页,则可以简单地将模板名称设置为template_name
对象上的字段FlatPage
。
创建flatpages/default.html
模板是您的责任;在您的模板目录中,只需创建一个包含文件default.html
的flatpages
目录。
平板模板传递单个上下文变量,flatpage
,这是平面对象。
以下是一个示例flatpages/default.html
模板:
<!DOCTYPE html>
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{{ flatpage.content }}
</body>
</html>
由于您已将原始HTML输入到平面页面的管理页面,因此flatpage.content
和flatpage.title
都标记为而不是 automatic HTML escaping。
FlatPage
对象的列表flatpages应用提供了一个模板代码,可让您遍历current site上的所有可用平面网页。
像所有自定义模板标签一样,您需要load its custom
tag library才能使用它。 加载库后,您可以通过get_flatpages
标记检索所有当前的平铺页:
{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
{% for page in flatpages %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
registration_required
flatpages ¶默认情况下,get_flatpages
模板标签只会显示标记为registration_required = False t3 >。
如果要显示注册保护的纯页,则需要使用for
子句指定已认证的用户。
像这样:
{% get_flatpages for someuser as about_pages %}
如果您提供匿名用户,则get_flatpages
的行为将与您未提供用户的行为相同,即只显示公开的页面。
可以应用可选参数starts_with
,以将返回的页面限制为以特定基本URL开头的页面。 此参数可以作为字符串传递,或作为要从上下文解析的变量传递。
像这样:
{% get_flatpages '/about/' as about_pages %}
{% get_flatpages about_prefix as about_pages %}
{% get_flatpages '/about/' for someuser as about_pages %}
django.contrib.sitemaps
¶FlatPageSitemap
[source]¶sitemaps.FlatPageSitemap
类查看为当前SITE_ID
定义的所有公开显示的flatpages
(请参阅sites documentation
),并在站点地图中创建一个条目。 这些条目仅包含location
属性 - 不是lastmod
,changefreq
或priority
。
这里是一个使用FlatPageSitemap
的URLconf示例:
from django.conf.urls import url
from django.contrib.flatpages.sitemaps import FlatPageSitemap
from django.contrib.sitemaps.views import sitemap
urlpatterns = [
# ...
# the sitemap
url(r'^sitemap\.xml$', sitemap,
{'sitemaps': {'flatpages': FlatPageSitemap}},
name='django.contrib.sitemaps.views.sitemap'),
]
2017年9月6日