跳转到主要内容

模板加载器,允许您同时扩展和覆盖模板。

项目描述

Build Status - develop branch Coverage of the code

提供一种模板加载器,允许您从特定的应用程序加载模板。这允许您同时 扩展覆盖 模板。

默认的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 (13.9 kB 查看哈希值)

上传时间

构建分发

django_app_namespace_template_loader-0.4.1-py2.py3-none-any.whl (15.1 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面