跳转到主要内容

扩展Django管理网站的简单工具

项目描述

django-template-media

此模块允许模板编写者在模板中操作表单媒体。这允许页面上的多个表单共享脚本,而无需重复包含它们。

使用这些工具包含在页面中的所有媒体都被收集到一个单一的“全局”[1] Media 实例中。所有操作都在这个“全局”[1] Media 实例上执行。

安装

使用pip安装此软件包

$ pip install django-template-media

将其添加到您的 INSTALLED_APPSTEMPLATE_CONTEXT_PROCESSORS

INSTALLED_APPS += (
    'django_template_media',
)

TEMPLATE_CONTEXT_PROCESSORS += (
    'django_template_media.context_processors.template_media',
)

通过加载 media_tags 库在您的模板中加载模板标签

{% load media_tags %}

使用

这些工具的设计是为了以合理的方式与模板层次结构一起工作。示例将假设一个名为 site.html 的基本模板,该模板定义了一个名为 media 的块,并且有两个 {% print_media %} 标签来打印累积的媒体文件

<!doctype html>
<html>
    <head>
        <title>Example site</title>

        {# Define the media for the page. This block is not printed #}
        {% load media_tags %}
        {% block media %}{% media %}
            {% add_css "screen" "css/bootstrap.css" %}
            {% add_css "screen" "css/site.css" %}
            {% add_css "print" "css/print.css" %}

            {% add_js "js/jquery.js" %}
        {% media %}{% endblock %}

        {# print out CSS media in the <head> #}
        {% print_media "css" %}

    </head>
    <body>

        {% block body %}

        {# print out JS media at the end of the <body> #}
        {% print_media "js" %}

    </body>
</html>

子模板使用 media 块将媒体添加到网站媒体。该块不需要命名为 media,只需在所有模板上具有相同的名称即可。该块必须在 {% print_media %} 调用之前出现。

打印媒体

{% print_media %}》标签用于打印页面上迄今为止累积的所有媒体。将其放置在基本模板中是一个明智的选择。

不带参数调用此标签将打印出所有累积的媒体。

您可以通过提供第二个参数来仅打印出cssjs

{% print_media "css" %}

{% print_media "js" %}

在模板中构建媒体

如果您想要构建一个临时的媒体实例,用于全站媒体或复杂页面,可以使用《{% media %}》块。生成的《Media()》实例将被添加到当前页面的媒体中。就像在表单上的《Media》类一样,同一个文件可以被多次命名——只有第一个实例会被使用。您可以安全地命名当前页面的所有依赖项,无需担心依赖项被多次包含。

{% extends "site.html" %}

{% load media_tags %}
{% block media %}
    {% media %}

        {% add_js "js/jquery.js" %}
        {% add_js "js/jquery.lib.js" %}
        {% add_js "js/bootstrap.js" %}
        {% add_js "js/bootstrap.lib.js" %}

        {% add_css "screen" "css/bootstrap.css" %}
        {% add_css "screen" "css/widget.css" %}

        {% if user.is_anonymous %}
            {% add_media login_form.media %}
        {% endif %}

    {% endmedia %}

    {# This is called **after** adding all the media #}
    {{ block.super }}
{% endblock %}

{% media %}》块中的三个可能的标签如下

{% add_js path %}

将JavaScript文件《path》添加到媒体中。一个标签中可以指定多个文件,或者将它们作为一系列标签依次放置。

{% add_css media_type path %}

将CSS文件《path》添加到媒体中,使用《media_type》。一个标签中可以指定多个文件,或者将它们作为一系列标签依次放置。

{% add_media media %}

将命名的表单媒体添加到当前媒体中。可以一次性添加多个媒体实例,只需命名它们即可,或者将它们作为一系列标签依次放置。

从表单添加媒体

如果您只想添加单个JavaScript文件或CSS文件,或者单个表单媒体实例,无需将所有内容包裹在《{% media %}》块中。

{% extends 'site.html' %}

{% load media_tags %}

{% block body %}
    <form action='.' method='post'>
        {% csrf_token %}
        {{ form }}
        <input type="submit">
    </form>
{% endblock %}

{% block media %}
    {% add_media form.media %}
    {{ block.super }}
{% endblock %}

{% add_media %}》标签接受多个媒体实例,因此如果您有多个表单,可以一次性添加所有表单的媒体。

{% add_media form_1.media form_2.media %}

与模板层次结构一起工作

在子模板中,对《{{ block.super }}》的调用必须在所有修改媒体的调用之后进行。因为媒体是在祖先的《{% block media %}》中打印出来的,所以子模板必须在调用《{{ block.super }}》之前添加它需要的所有媒体。

{% add_js %}》、《{% add_css %}》和《{% add_media %}》标签在《{% media %}》块外始终预先添加到当前页面的媒体中。这是因为模板是从子到父渲染的,父级媒体应该先于子级媒体。因此,如果您在页面上有多个《{% add_media %}》或《{% media %}》标签,媒体将按其在页面上的出现顺序的相反顺序打印出来。因此,建议每个模板只有一个《{% add_media %}》或《{% media %}》块,以防止混淆。

在《{% media %}》块中,对《{% add_media %}》、《{% add_js %}》和《{% add_css %}》的调用将媒体附加到当前临时的媒体实例。


项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。

源分布

django-template-media-0.3.0.tar.gz (5.1 kB 查看哈希值)

上传时间

支持