django应用程序模型处理图像精灵以加速具有多个小图像的页面加载。

django-sprites的Python项目详细描述


django sprites是一个django应用程序,有两个捆绑的模型,处理
sprites及其关联的spriteiteitem。
----


*sprite是一个组合图像,由一个或多个
spriteitem组成,每一个都是一个图像,用作html元素的
图像背景。

*将这些背景图像组合成一个图像可以极大地节省加载时间。在
从同一服务器连续请求多个图像时会损失大量时间,并且
只能同时请求2-4个图像。因此,如果你有20或
30,这可能会给你的
整个页面加载增加数百或数千毫秒。


*每个spritetem都包含与你的站点实际相关的信息
设计,如图像本身、尺寸(这些是计算出来的)。
html属性,如class和id,这些属性被
model方法用来生成样式,完整的css行,和/或HTML
标记源,标记源后面有相关的图像,内部有任何输入HTML


要求:
----


*pil,支持libjpeg

*django(显然)


*urllib2


设置:
——


*pip install django sprites

*添加到您的设置中。py installed嫒apps:
'sprites',

*settings.py:
media_root='路径/to/your/actual/expected/media/root'


这将与下一个
配置项中的相对路径一起使用,以确定图像的保存位置。



media_url='http://myserver.mydomain.com/media'


除了下面的相对路径之外,django还使用它生成图像文件的url。完全限定路径
实际上不是必需的,但最好在这里使它完全-
限定,以便您可以在任何域上使用HTML,而不是像Django应用程序一样使用它。

*也可以在settings.py(可选):
sprite_path='<;存储精灵的某些相对路径>;'
sprite_item_path='<;另一个相对路径>;'

>这些默认值分别为"精灵"和"精灵项"。


sprite=sprite.create_from_url(['http://path.to/first.jpg',
'http://path.to/second.jpg'…])
或…
sprite=sprite.create_from_local_files(['/path/to/first/file',
'/path/to/second/file'])

对于sprite.spriteitetem_set.all()中的spritetem:
如果要进行任何进一步的样式设置,每个spritetem至少应获得一个(唯一的)css_id、
和一个css_类。-输出css样式指令,而不使用选择器指定,例如:"显示:块;背景:url(任意);等等"

-spritetem.css-输出相同的样式指令,使用基于spritetem.css id的选择器,即:"myimage{display:block;etc.}"


-spritetem.tag_with_style-输出一个安全标记(准备在模板中使用)的HTML跨度标记,带有嵌入样式attrib,
包括由spritetem.internal给出的任何内部html

-spritetem.thumbnail-如果创建了,这是一个链接到另一个spritetem的onetoone,根据惯例(但不是要求
)是spritetem的thumbnail。

-spritetem.make_thumbnail(width=64,height=64)-返回一个
spritetem.image的pil.image副本,大小为width,height。
宽高比被保留,因此大小可能不完全匹配。

这是精灵使用的。创建缩略图(宽度、高度),
它生成新的精灵项目,将那些
精灵项目与作为其缩略图的精灵项目相关联,并返回新创建的精灵。

-spritetem.sprite.build()应在对精灵进行
更改后调用。这个应用程序内部的方法可以很好地处理
,但是如果您做了更改,就必须确定
重新构建精灵的时间和频率。我建议
先构建一组sprite,这样就不会

*中间件
添加"sprites.middleware.spritereplacebyclass"到
中间件类可以用样式化的div替换img元素
。img的src将成为div的(sprite)
背景。从img到div的dom转换并不完美,因此要小心。默认情况下,
css类为"sprite\u img"的img将被替换。类
可以用settings.py中的sprite_replace_css_类进行更改。


注意:中间件依赖于beautifulsoup。因为
不只是将regex转换成html。



*注意:除了中间件之外,这并不是真正意义上的
自己使用。理想情况下,您将拥有一种与spritetem相关的foreignkey模型,例如:


class sitelement(models.model):
spritetem=models.foreignkey(spritetem)
link=models.charfield(max_length=255,null=true,blank=true)

def get_tag(self):
如果self.link不是none:
返回"<;a href="%s">;%s"<;/a>;'%(
self.link,self.spritetem.tag_with_style)
返回self.spritetem.tag_with_style

*应支持Django存储后端扩展。测试
至少使用s3botostorage。

*根据组件spritetem图像的pil检测格式
检测并设置图像文件类型。最终,它会使用附加到精灵的最后一个精灵项目来设置格式。



todo:
----


*可能会将其按图像格式拆分。将jpeg混合到
检测为gif的sprite看起来很糟糕。

*写入测试

*完成todo列表

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

推荐PyPI第三方库


热门话题
创建大十进制对象时发生java错误   java为什么netty日志不显示正确的类和包信息   java AWS Lambda,如何正确实例化AmazonHttpClient?   java如何防止控制器中的Put API受到CheckMarx扫描中反映的XSS攻击?   java如何在Android上滚动时更改图像   java为什么通知没有显示在API 28中?   java分配问题OCJP;为什么我不能将int传递给short?   java在非静态内部类中使用泛型   正则表达式从Java字符串中提取word中指定的日期值   java Primefaces selectManyCheckbox未在bean中填充   美化javaxml输出   java带2个箭头的按位移位和带3个箭头的按位移位有什么区别?   使用JAXB和SpringMVC进行java XML绑定   Java高级功能weblogic中的Web服务   java IIN插入HQL中   缺少java PrintCommandListener   java如何模拟SpringBean的自动连接列表?   javasocket服务器、客户端检测服务器已死亡   将按钮添加到使用java图形的contentPane   java EJB3在第一次运行时调用计时器超时时出错