css和js的资源管理器

quantumcore.resources的Python项目详细描述


下面是一个关于如何在css资源中使用它的示例。

首先,我们设置一些资源:

from quantumcore.resources import CSSResourceManager, css_from_pkg_stream
from quantumcore.resources import JSResourceManager, js_from_pkg_stream, jst_from_pkg_stream

r1 = css_from_pkg_stream(__name__,
                         'static/css/screen.css',
                         merge=True,
                         auto_reload=True)
r2 = css_from_pkg_stream(__name__,
                     'static/css/addons.css',
                     merge=True,
                     auto_reload=True)
r3 = css_from_pkg_stream(__name__,
                         'static/css/print.css',
                         merge=True,
                         name="print",
                         auto_reload=True)
css_manager = CSSResourceManager([r1,r2,r3],
                                 prefix_url="/css",
                                 auto_reload=True)

# JS
js_manager = JSResourceManager([
    js_from_pkg_stream(__name__,
                       'static/js/jquery.json-2.2.min.js',
                       merge=True, prio=2),
    js_from_pkg_stream(__name__,
                       'static/js/jquery.cookie.js',
                       merge=True,
                       minimize_method="jsmin",
                       prio=3),
    ], prefix_url="/js", auto_reload=True)

这定义了两个css和两个js资源。

实例化资源

资源对应于文件系统上的一个文件。在这里,我们使用名为js_from_pkg_streamcss_from_pkg_stream的快捷方式从包中加载文件。

这些函数的必需公共参数是:

  • __name__用于标识包中的文件名。
  • 路径是__name__所属包中的路径。

可选参数为:

  • merge定义是否允许资源与其他类似资源合并。默认值是True
  • 使用prio可以在资源管理器中定义资源的顺序。先加载数字较低的资源。默认值是1
  • name是一个可选的名称,在该名称下资源可以聚集在一起。然后可以一起检索具有相同名称的资源。它默认为""。在本例中,前两个css资源将一起检索,因为它们都具有相同的空名称。
  • processors定义一个可选的处理器函数列表,这些函数将资源内容作为输入并输出另一个(例如,压缩的)版本。
  • auto_reload定义是否可以重新加载资源。请注意,这必须在资源和资源管理器中设置。

css特定参数

  • mediaf定义要用于此样式表的媒体类型,例如printscreen。它可以是字符串或字符串列表。默认值是['screen', 'projection']

js特定参数

  • minimize_method"jsmin"None,如果给出第一个,那么javascript代码也将被缩小,这意味着删除空白和缩短变量。

实例化资源类

如果有字符串,还可以直接实例化CSSResource,或者 JSResource类:

r = CSSResource(
        source = u'my CSS',
        minimize_method = None,
        media = ['projection', 'screen'],
        type_ = u'text/css',
        ...
)

r = JSResource(
        source = u'my JS',
        minimize_method = None,
        type_ = u'text/css',
        ...
)

除了__name__filename之外,上述所有参数都适用。

资源经理

在上面的示例中,我们看到了这样的资源管理器:

css_manager = CSSResourceManager([r1,r2,r3],
                 prefix_url="/css",
                 auto_reload=True)

js_manager = JSResourceManager([.....],
                 prefix_url="/js",
                 auto_reload=True)

它们处理项目中使用的所有css和js文件,这些文件最终被分组到集群中。

这两个版本都采用prefix_url,稍后将根据该值提供服务。这定义了哪些url将由manager实例计算。

可选参数为:

  • no_merge可以是TrueFalse,并定义资源是否合并到集群中。
  • auto_reload定义管理器是否应测试资源是否已更改并且应重新加载。只有当资源的auto_reload也设置为True时,这才有效。

我们也可以稍后添加资源:

css_manager.append(resource3)
js_manager.append(resource4)

现在我们可以将此资源对象传递给模板,例如,chameleon模板:

template.render(js_manager = js_manager, css_manager = css_manager)

模板代码如下所示:

<tal:block replace="structure css_resources()" />
<tal:block replace="structure js_resources()" />

这将呈现指向所有未命名集群的链接(意味着没有name参数的资源 给出)。您还可以使用以下特定名称呈现指向所有资源的链接:

<!--[if lt IE 8]>
    <tal:block replace="structure css_resources('ie')" />
<![endif]-->

将使用name='ie'呈现所有资源。

在生成的html中,这与以下内容类似:

<link href="/css/style.css?h=0140632a9c7bdfec7a2a73829e37d18a" media="projection, screen" rel="stylesheet" type="text/css" />
<link href="/css/ie.css?h=4e743c01195a9352f5b3763f8dcffd69" media="projection, screen" rel="stylesheet" type="text/css" />

<script src="/js/script.js?h=15b10405313c16a428bce63782ed86c7" type="text/javascript"></script>

如您所见,如果可能的话,这些资源被聚集到文件中。此外,还为每个资源链接提供了一个缓存密钥,如果内容发生更改,缓存密钥将发生更改。

服务资源

要提供这些文件,我们必须将url传递给资源注册表。在wsgi应用程序中,这可能看起来像这样:

def __call__(self, environ, start_response):
    path = environ['PATH_INFO'].split("/")

    if path[1]=="css":
        css_manager.render_wsgi(environ, start_response)
    elif path[1]=="js":
        js_manager.render_wsgi(environ, start_response)

这将采用wsgi环境中的路径,并检查它是否与生成的url之一匹配。

如果没有wsgi,它可能看起来像这样:

code, data, headers = resources.render(url)

data是一个迭代器,包含合并的最小化css文件,code是返回代码,通常是200 Okheaders(key, value)元组的列表。

更改历史记录

0.6-(未发布)

  • 修正了命名错误:如果资源有不同的名称和不同的prio,它们只会被排序 按优先顺序。这导致合并错误,因为在尝试合并时名称不断更改。 现在它们是按名称先排序,然后按优先级排序的。

0.5-(2010/04/06)

初始版本

下载

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java ldap连接池超时属性未按预期工作   java Eclipse Google插件不会为web应用程序启动服务器   将工作应用程序从一台pc复制到另一台pc的java安全   安卓如何查找和调试实际代码行中的Java错误:致命异常:Java。lang.IndexOutOfBoundsException:   jms将应用程序Java连接到websphere MQ   java如何遍历对象列表并分配子对象?   java我的代码有什么问题吗?为什么压缩和解压缩速度比其他应用程序慢?   java表达式的类型必须是数组类型,但它被解析为Object   模拟协议socketjava   使用googleappengine的java缓存   java为什么对象引用父类的值而不是它被分配到的类?   删除位置华为工具包安卓 studio时发生java错误   unix执行远程ssh命令“which java”(JSch java)   Dropbox Djinni Java接口与类扩展   java条形码扫描完成后是否有事件?   安卓 GCM Java服务器:发送带有重音字符的消息   java使用PDF框从PDF中读取条形码   私有静态最终更改的java值