如何显示缩略图?

时间:2014-03-26 11:07:01

标签: python django thumbnails

请帮助解决问题。

我有这样的代码。有用: models.py:

class Drt(models.Model):
    title = models.CharField(max_length=100)
    date = models.DateField()
    image = models.FileField(upload_to='avtos/static/uploads/')

    @classmethod
    def get_all_entries(self):
        return self.objects.all()

    @property
    def image_name(self):
        return os.path.basename(self.image.name)

template.html:

{% load staticfiles thumbnail %}

<div class="list">
    {% for entrie in all_entries_avtopark %}
        <a class="fancybox" href='static/uploads/{{ entrie.image_name }}'>
        {% thumbnail entrie.image "204x127" crop="center" as im %}
            <img class="" alt="{{ entrie.title }}" src='static/uploads/{{ entrie.image_name }}' width="204" height="127" />
        {% endthumbnail %}  
        </a>
    {% endfor %}
</div>  

我想应用sorl.thumbnail模块并编写以下代码。 template.html:

<div class="list">
    {% for entrie in all_entries_avtopark %}
        <a class="fancybox" href='static/uploads/{{ entrie.image_name }}'>
        {% thumbnail "static/uploads/{{ entrie.image_name }}" "204x127" crop="center" as im %}
            <img class="" alt="{{ entrie.title }}" src='{{ im.url }}' />
        {% endthumbnail %}  
        </a>
    {% endfor %}
</div>  

不会显示生成的图像(src链接无处可寻)。

请告诉我如何打印缩略图静态文件?

2 个答案:

答案 0 :(得分:0)

这里有一个例子:

<div class="list">
    {% for entrie in all_entries_avtopark %}
        <a class="fancybox" href='/media/{{ entrie.image }}'>
        {% thumbnail entrie.image "204x127" crop="center" as im %}
            <img class="" alt="{{ entrie.title }}" src='{{ im.url }}' />
        {% endthumbnail %}  
        </a>
    {% endfor %}
</div>  

和文档link for sorl thumbnail

用户上传的媒体文件通常存储在媒体目录中(非静态)。

答案 1 :(得分:0)

您不需要image_name方法。 sorl-thumbnail templatetag知道如何处理FileFields。所以这应该有效:

{% thumbnail entrie.image "204x127" crop="center" as im %}
    <img class="" alt="{{ entrie.title }}" src='{{ im.url }}' />
{% endthumbnail %}

此外,对于原始图像的链接,您应该使用FileField的url属性,它将为您提供文件的绝对路径,实际上使用upload_to配置和MEDIA_URL配置。

<div class="list">
    {% for entrie in all_entries_avtopark %}
        <a class="fancybox" href="{{ entrie.image.url }}">
        {% thumbnail entrie.image "204x127" crop="center" as im %}
            <img class="" alt="{{ entrie.title }}" src='{{ im.url }}' />
        {% endthumbnail %}  
        </a>
    {% endfor %}
</div>

顺便说一句,如果您知道您将始终在该字段中存储图像,那么最好使用ImageField来验证上传的文件实际上是图像。