模板加载程序允许您同时扩展和重写模板。
django-app-namespace-template-loader的Python项目详细描述
提供一个模板加载器,允许您从 具体应用。这允许您同时扩展和重写 同时模板。
默认的django加载程序要求您复制所需的整个模板 要重写,即使只想重写一个小块。
这就是这个包试图解决的问题。
示例:
如果要更改管理站点的标题,则 已创建此模板:
$ cat my-project/templates/admin/base_site.html {% extends "admin/base.html" %} {% load i18n %} {% block title %}{{ title }} | My Project{% endblock %} {% block branding %} <h1 id="site-name">My Project</h1> {% endblock %} {% block nav-global %}{% endblock %}
使用命名空间扩展和重写版本:
$ cat my-project/templates/admin/base_site.html {% extends "admin:admin/base_site.html" %} {% block title %}{{ title }} - My Project{% endblock %} {% block branding %} <h1 id="site-name">My Project</h1> {% endblock %}
注意,在此版本中,块nav-global不必 因为遗产而存在。
没有名称空间的较短版本:
$ cat my-project/templates/admin/base_site.html {% extends ":admin/base_site.html" %} {% block title %}{{ title }} - My Project{% endblock %} {% block branding %} <h1 id="site-name">My Project</h1> {% endblock %}
如果不指定应用程序命名空间,则第一个匹配模板 将被使用。当多个应用程序提供相同的 但具有不同功能的模板。
多个空命名空间的示例:
$ cat my-project/application/templates/application/template.html {% block content%} <p>Application</p> {% endblock content%} $ cat my-project/application_extension/templates/application/template.html {% extends ":application/template.html" %} {% block content%} {{ block.super }} <p>Application extension</p> {% endblock content%} $ cat my-project/templates/application/template.html {% extends ":application/template.html" %} {% block content%} {{ block.super }} <p>Application project</p> {% endblock content%}
将呈现:
<p>Application</p> <p>Application extension</p> <p>Application project</p>
安装
首先,使用 最喜欢的包管理器。示例:
$ pip install django-app-namespace-template-loader
安装后,将app_namespace.Loader添加到TEMPLATE_LOADERS 项目的设置。
TEMPLATE_LOADERS = [ 'app_namespace.Loader', ... # Other template loaders ]
django>;=1.8app_namespace.Loader应添加到 DjangoTemplates后端的options dict中的{tt6}$部分 相反。
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'OPTIONS': { 'loaders': [ 'app_namespace.Loader', 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ], }, }, ]
注意:对于django 1.8,app_namespace.Loader应该是列表中的第一个 装载机。
已知限制
app_namespace.Loader如果结合使用,则无法正常工作 使用django.template.loaders.cached.Loader,继承基于 空命名空间。
注释
最初基于:http://djangosnippets.org/snippets/1376/
要求:django>;=1.8
使用Python2.7、3.3、3.4进行测试。
如果要将此应用程序用于Django的早期版本,请使用 包的0.3.1版。
如果要将此应用程序与Python2.6一起使用,请使用 包裹。