【问题标题】:django - Things to know about sorl-thumbnaildjango - 关于 sorl-thumbnail 的注意事项
【发布时间】:2013-11-22 22:13:36
【问题描述】:

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

  1. 仅在template 中实现它是否与在modelsview 中使用它并为每个创建一个新的缩略图相同?
  2. 如何为不同的图像配置不同的缩略图,可以在easy_thumbnail中完成?
  3. 如何覆盖默认值,例如:覆盖Quality的值等

最后,这是一种正确的实现方式吗?任何意见或建议将不胜感激。谢谢。

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 实现类似的效果,这可以在 easy-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' }}">

【问题讨论】:

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


    【解决方案1】:

    就像 django 中的许多东西一样,sorl-thumbnail 的实现既简单又优雅,而且您使用它的方式是正确的。

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

    1. 如果存在,则返回这个。
    2. 如果没有,则生成并存储一个新的,然后返回。

    因此,根据需要生成缩略图缓存。键值存储是一种存储缩略图的方法,使它们可以快速查找和检索。使用上述步骤,将根据用户的请求生成和存储缩略图。

    “按需”生成缩略图的过程运行良好,随着图像逐渐添加到您的网站,将根据需要创建新图像的缩略图,并从商店中检索旧图像的缩略图。

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

    回答您的问题:

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

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

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

    所有配置都在{% thumbnail %}标签中完成,如果为同一图像生成不同的缩略图,这些将分别存储在key, value store中。

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

    这里有一个设置列表: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 所做的,尽管需要大量的编程来实现上述两个小模板的结果。

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

    【讨论】:

    • 那么仅仅在模板中实现就足够了吗?我查看了文档,但并没有完全掌握设置的“操作方法”。请您添加一个关于如何在 sorl-thumbnails 的 settings.py 中为不同别名添加不同设置的 sn-p (就像 easy_thumbnails 一样,我在编辑中添加了它)。
    • {% include x %} 确实很聪明!以及如何覆盖默认值(例如:quality)?可以在 settings.py 中作为easy-thumbnails 完成吗?如果是,怎么做?
    • 感谢您的宝贵时间和回答!
    • @HenryFlorence 如果我创建了这样的功能(如easy_thumbnails 中的别名)并发送拉取请求,它会被合并吗?这是有用的功能吗?至于你的想法?
    猜你喜欢
    • 2016-05-09
    • 2011-05-13
    • 2012-06-21
    • 2012-11-22
    • 2013-01-30
    • 2013-06-20
    • 2021-05-09
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多