这是一个简单的django应用程序,可以直接从模板发布一些页面
emencia-django-staticpages的Python项目详细描述
简介
这是一个简单的django应用程序,可以直接从模板发布一些页面。
是的,这只是为了使用django.views.generic.TemplateView,但是这个应用程序将有助于管理许多页面并支持django站点地图。
安装
在“设置”中将其添加到已安装的应用程序中:
INSTALLED_APPS = ( ... 'staticpages', ... )
用法
所有静态页条目必须定义三个参数:
- 要与url匹配的regex模式;
- 要使用的模板路径;
- URL名称,必须是唯一的;
原始方式
在设置中:
STATICPAGES = [ ... (r'foo/$', "foo/index.html", 'foo-index'), (r'foo/part1/$', "foo/part1.html", 'foo-part1'), (r'foo/part2/$', "foo/part2.html", 'foo-part2'), ... ]
然后在你的urls.py:
url(r'^staticpages/', include('staticpages.urls.include')),
如果您想用django站点地图在sitemap.xml中发布它们,那么您必须在urls.py:
from staticpages.sitemaps import StaticPageSitemapBase, StaticPageEntryTemplate class MypagesSitemap(StaticPageSitemapBase): page_entries = [ StaticPageEntryTemplate(url_name='mypage-foo', template_name='foo.html'), ] # Enabled sitemaps sitemaps = { # For Prototypes 'mypages': MypagesSitemap, } urlpatterns += patterns('django.contrib.sitemaps.views', url(r'^sitemap\.xml$', 'sitemap', {'sitemaps': sitemaps}), )
半自动方式
此方法使您能够根据需要装载不同的静态页映射,与使用任何设置名称存储页映射的原始方式相反。如果需要多个分隔的页映射,这将非常有用。
在设置中:
FOO_STATICPAGES = ( (r'foo/$', "foo/index.html", 'foo-index'), (r'foo/part1/$', "foo/part1.html", 'foo-part1'), (r'foo/part2/$', "foo/part2.html", 'foo-part2'), ) BAR_STATICPAGES = ( (r'bar/$', "bar/index.html", 'bar-index'), (r'bar/part1/$', "bar/part1.html", 'bar-part1'), (r'bar/part2/$', "bar/part2.html", 'bar-part2'), )
然后在你的urls.py:
from django.conf import settings from staticpages.urls import loaders urlpatterns = patterns('', *loaders.mount_staticpages(*settings.FOO_STATICPAGES)) + urlpatterns if settings.DEBUG: urlpatterns = patterns('', *loaders.mount_staticpages(*settings.BAR_STATICPAGES)) + urlpatterns
注意settings.DEBUG的用法,这是一个可以使用多个分隔页映射的示例,bar页将不会在生产环境中发布,但foo页将被发布。
对于django站点地图的sitemap.xml,您必须在urls.py:
from django.conf import settings from staticpages.sitemaps import StaticPageSitemapAuto class FooSitemap(StaticPageSitemapAuto): pages_map = settings.FOO_STATICPAGES class BarSitemap(StaticPageSitemapAuto): pages_map = settings.BAR_STATICPAGES # Enabled sitemaps sitemaps = { 'foo': FooSitemap, 'bar': BarSitemap, } urlpatterns += patterns('django.contrib.sitemaps.views', url(r'^sitemap\.xml$', 'sitemap', {'sitemaps': sitemaps}), ) + urlpatterns
静态页面视图
还要注意,每个页面都将使用视图staticpages.views.StaticPageView。这只是来自django.views.generic.TemplateView的继承,它将包含一个变量page_map。此变量包含已用页映射。您可以在模板中使用它,如下所示:
<ul>{% for url_pattern,template_name,url_name in page_map %} <li><a href="{% url url_name %}">{{ template_name }}</a></li> {% endfor %}</ul>
这将列出页面地图中所有可用的静态页面,有助于自动浏览它们的索引。