模板加载器,允许您同时扩展和覆盖模板。
项目描述
提供一种模板加载器,允许您从特定的应用程序加载模板。这允许您同时 扩展 和 覆盖 模板。
默认的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>
安装
首先,使用您喜欢的包管理器安装 django-app-namespace-template-loader。示例
$ pip install django-app-namespace-template-loader
安装完成后,将 app_namespace.Loader 添加到您的项目中的 TEMPLATE_LOADERS 设置。
TEMPLATE_LOADERS = [ 'app_namespace.Loader', ... # Other template loaders ]
从 Django 1.8 开始,应将 app_namespace.Loader 添加到 DjangoTemplates 后端 OPTIONS 字典的 'loaders' 部分。
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
在 Python 2.7、3.3、3.4 上进行了测试。
如果您想使用此应用程序的 Django 早期版本,请使用该包的 0.3.1 版本。
如果您想使用此应用程序与 Python 2.6 一起使用,请使用该包的 0.2 版本。
项目详情
django-app-namespace-template-loader-0.4.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7a450985479a2e07fe8a1e4e8208fc9e1d8b35503526dd28eba5f8ad4ba31d4e |
|
MD5 | 51532ae302b46b380beed6bfd920cbce |
|
BLAKE2b-256 | e65dc7ce27fbb1cf4fc14c6726d2c96d4072903678cbc047fd3bd524c7310658 |
django_app_namespace_template_loader-0.4.1-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 356539413b5d1de0eff91aea7a03806b5ef6874ee5420ea8c273f72bbc601d74 |
|
MD5 | d8a9e6ae192e5c66dc0f83fa521a0fc5 |
|
BLAKE2b-256 | 2ea60a5ee33c8d0468b8e3aa8eca0c48dc1ecc5701adce63780b87cdf2df8e41 |