11

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

  1. 是否仅在 the 中实现它与在 the或 thetemplate中使用它并为每个缩略图创建一个新的缩略图是一样的?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 中完成:

设置.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' }}">
4

1 回答 1

22

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

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

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

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

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

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

要回答您的问题:

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

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

  • 如何为不同的图像配置不同的缩略图,就像在easy_thumbnail中一样?

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

  • 如何覆盖默认值,例如:覆盖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 %}
....

The templates for the thumbnails would be stored as separate files in your template directory and could look something like:

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 %}

In each of the sub templates, all the settings for your 'aliases' can be made. Alternatively, it would be possible to create an additional template tag to read these attributes from settings.py, this is what easy_thumbnail does, although would require a lot of programming to achieve the results of the 2 small templates above.

If you have further questions about sorl-thumbnail, I would be happy to help you with them.

于 2013-11-13T21:22:28.823 回答