django - 关于sorl-thumbnail的事情

时间:2013-11-11 07:14:03

标签: django django-models django-templates django-views sorl-thumbnail

我正在使用sorl-thumbnail为我的项目创建缩略图。我只在模板中实现它,而不是在模型或视图中实现它。每个缩略图都与原始图像相关联,这些图像由灯箱使用。作为一个新手,我想知道它的一些功能:

  1. 是否仅在template中实施它是否与在modelsview中使用它并为每个创建新缩略图相同?
  2. 如何为不同的图片配置不同的缩略图,因为可以在easy_thumbnail中完成?
  3. 如何覆盖默认值,例如:覆盖Quality等的值
  4. 最后,这是实施它的正确方法吗?任何建议或建议将不胜感激。谢谢。

    HTML:

    {% for photo in photos %}
        <div class="thumbnail_container">
            <a href="{{MEDIA_URL}}{{photo.image}}" class="gallery" title="{{photo.title}}">
                {% thumbnail photo.image "200x200" as im %}
                    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"  class="thumbnail">
                {% endthumbnail %}
            </a>
        </div>
    {% endfor %}
    

    修改

    如何为sorl-thumbnails创建这样的东西,这可以通过简单的缩略图来完成:

    settings.py

    THUMBNAIL_ALIASES = {
        '': {
            'avatar': {'size': (100,100), 'crop': True},
            'forum': {'size': (203,103), 'crop':False},
        },
    }
    

    然后在模板中,我可以从settings.py中定义的别名中选择:

    <img src="/static/{{forum.image |thumbnail_url:'forum' }}">
    

    <img src="/static/{{forum.image |thumbnail_url:'avatar' }}">
    

1 个答案:

答案 0 :(得分:20)

像django sorl-thumbnail中的许多内容一样简单而优雅地实现,并且您使用它的方式是正确的。

每次要求sorl-thumbnail提供新的缩略图时,都会检查其缓存中是否存在:

  1. 如果存在,则返回此项。
  2. 如果没有,则生成并存储一个新的,然后返回。
  3. 因此,根据需要生成缩略图缓存。键值存储是一种存储缩略图的方法,可以快速查找和检索。使用上述步骤,将根据用户的要求生成和存储缩略图。

    缩略图生成'按需'流程效果很好,随着图像逐渐添加到您的网站,新图像的缩略图将根据需要创建,缩略图用于从商店检索旧图像。

    存储缩略图Sorl-thumbnail使用数据库和内存缓存的组合。如果应用程序和/或Web服务器重新启动,数据库可确保保存所有缩略图。然后,缩略图将根据需要加载到内存缓存中(您猜对了),从而确保用户快速加载。

    回答你的问题:

      
        
    • 是否仅在模板中实现它是相同的,就像在模型或视图中使用它并为每个模板创建一个新的缩略图一样?
    •   

    无法在模型或视图中生成缩略图,因为它们是在用户请求时按需生成的。这非常有效。我想你可以编写一个脚本来请求所有缩略图,这些缩略图每晚运行以确保生成所有缩略图,尽管这可能不是必需的。

      
        
    • 如何为不同的图像配置不同的缩略图,因为它可以在easy_thumbnail中完成?
    •   

    所有配置均在{% thumbnail %}标记中完成,如果生成同一图像的不同缩略图,则这些缩略图将分别存储在键值存储中。

      
        
    • 如何覆盖默认值,例如:覆盖质量等的值
    •   

    此处有一个设置列表:http://sorl-thumbnail.readthedocs.org/en/latest/reference/settings.html,这些设置都应在settings.py文件中设置。默认情况下,质量设置为95,这非常高。

    编辑 - 在settings.py中设置jpeg质量

    ...
    THUMBNAIL_QUALITY = 60
    THUMBNAIL_PROGRESSIVE = False
    ...
    

    这两个新增功能,在项目的settings.py文件中的任何位置,都会将缩略图的jpeg质量降低到60,并关闭渐进式jpeg的创建。

    修改 - 缩略图别名

    sorl-thumbnail中没有对缩略图别名的内置支持。实现它们的最简单方法可能是小子模板,然后可以将其加载到主模板中。

    所以页面模板可能看起来像:

    ....
    {% load thumbnail %}
    ....
    <h3>Recent image uploads:</h3>
    {% for item in recentUploads %}
        {% include "bigThumbnail.html" %}
    {% endfor %}
    
    <h3>Older image uploads</h3>
    {% for item in oldUploads %}
        {% include "smallThumbnail.html" %}
    {% endfor %}
    ....
    

    缩略图的模板将作为单独的文件存储在模板目录中,可能如下所示:

    <强> bigThumbnail.html

    {% thumbnail item.image "100x100" crop="center" as im %}
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
    {% endthumbnail %}
    

    <强> smallThumbnail.html

    {% thumbnail item.image "40x40" crop="center" as im %}
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
    {% endthumbnail %}
    

    在每个子模板中,可以进行“别名”的所有设置。或者,可以创建一个额外的模板标签来从settings.py读取这些属性,这是easy_thumbnail所做的,尽管需要大量的编程才能实现上述2个小模板的结果

    如果您对sorl-thumbnail有其他疑问,我们很乐意为您提供帮助。