【问题标题】:Sorl-thumbnail bad url'sSorl-thumbnail 错误的 url
【发布时间】:2011-09-05 11:01:19
【问题描述】:

我按照说明设置了 sorl-thumbnail,但是当我尝试在我的应用中使用模板标签时,没有任何图像出现。

似乎网址无效,但不清楚需要什么额外配置。

生成这样的图像:

<img src="cache/e5/25/e5253a328b9130ecd7d820893f44b0e6.jpg" width="100" height="100">

“缓存/...”如何解析为对图像的请求?这些请求与我的应用程序相关,而不是 sorl-thumbnail:

[31/May/2011 07:13:05] "GET /myapp/cache/e5/25/cache/e5/25/cache/00/73/0073095ee4b968b45386ef3fec4f389c.jpg HTTP/1.1" 200 1004

下面是settings.py中的相关行:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    # Uncomment the next line to enable the  admin:                                          
    'django.contrib.admin',
    'mysite.myapp',
    'sorl.thumbnail',
)

CACHES = {
#    'default': {                                                                           
#        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',                          
#        'LOCATION': 'cache',                                                               
#    }                                                                                    
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

# URL that handles the media served from MEDIA_ROOT. Make sure to use a                     
# trailing slash if there is a path component (optional in other cases).                    
# Examples: "http://media.lawrence.com", "http://example.com/media/"                        
MEDIA_URL = ''

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use   a              
# trailing slash.                                                                           
# Examples: "http://foo.com/media/", "/media/".                                             
ADMIN_MEDIA_PREFIX = '/media/'

这是我模板中的代码:

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

图片肯定会被上传(我检查了upload_to中指定的目录),当我使用文件系统缓存时,它们被存储在相对于我的应用程序的目录缓存/中。我将其更改为使用 memcache 看看是否有帮助。

【问题讨论】:

  • 您的 MEDIA_URL 和 MEDIA_ROOT 设置是否正确?可以查看普通图片(即非缩略图)吗?
  • MEDIA_ROOT 和 MEDIA_URL 尚未设置。我没有任何静态图片。

标签: django sorl-thumbnail


【解决方案1】:

您需要正确配置 MEDIA_URL。 ImageFile 的"url" attribute 基本上只是来自底层存储后端的传递。对于开箱即用的 Django,upload_to path is appended to MEDIA_URL 为 FileField 生成 URL。

你有什么:'' + 'cache/e5/25/e5253a328b9130ecd7d820893f44b0e6.jpg'
你想要什么:'/media/' + 'cache/e5/25/e5253a328b9130ecd7d820893f44b0e6.jpg'

注意:您需要确保 MEDIA_URL 是别名/映射到 Django 将您的文件上传到 (MEDIA_ROOT) 的任何目录。

----- 编辑----
请参阅以下指向默认 Django 存储后端源的链接。 https://code.djangoproject.com/browser/django/tags/releases/1.3/django/core/files/storage.py#L154
https://code.djangoproject.com/browser/django/tags/releases/1.3/django/core/files/storage.py#L240

【讨论】:

  • sorl-thumbnail 不访问缓存中的图像吗?我目前已将其配置为使用 memcache。如果我将 MEDIA_URL 配置为直接从 MEDIA_URL/cache 提供文件...那么它不会从 memcache 中获取它们。
  • 根据我上面链接的 sorl-thumbnail 文档,ImageFile.url 属性是使用存储后端计算的。 Django 默认存储后端使用 MEDIA_URL。因此,如果您使用该后端,则需要设置 MEDIA_URL。
  • 谢谢,这就是问题所在。我也将“媒体/”添加到我的网址中。
  • 您可能应该使用 'django.core.context_processors.media' 模板上下文处理器并在模板中使用 {{ MEDIA_URL }} 而不是硬编码。
  • 他没有硬编码任何东西,带有缓存 url 的 img 标签是由 Sorl Thumbnail 生成的...是的,MEDIA_URL
猜你喜欢
  • 2014-12-21
  • 2013-04-23
  • 1970-01-01
  • 2016-05-09
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
相关资源
最近更新 更多