0

从我在 settings.py 中定义我的那一刻起MEDIA_ROOT,我无法让 sorl-thumbnail 生成带有图像的缓存文件夹。在此之前,我没有设置 MEDIA_ROOT 并且它工作得很好。

请注意,我正在使用 DEBUG=True 进行测试。

这是我的设置:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DEBUG = True
TEMPLATE_DEBUG = DEBUG

INSTALLED_APPS = (
    'django.contrib.sites',
    'grappelli',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'djangobower',
    'pipeline',
    'sorl.thumbnail',
    'django_countries',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    # Local apps
    ...

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

THUMBNAIL_DEBUG = DEBUG
THUMBNAIL_PREFIX = 'cache/'

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'pipeline.finders.PipelineFinder',
)

# TODO : use redis in prod
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'cache',
    }
}

我的 home.html 文件包含以下内容:

{% extends 'base.html' %}

{% load static i18n thumbnail %}

{% static 'main/img/business_man_in_the_mirror.jpg' as business_man_in_the_mirror %}
{{ business_man_in_the_mirror }}
{% thumbnail business_man_in_the_mirror|slice:"1:" "x300" as im %}
    {{ im.url }}
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"
         alt="{% trans "Homme d'affaire se regardant dans le miroir" %}"
         class="center-block img-responsive">
{% endthumbnail %}

{{ business_man_in_the_mirror }} 打印“/static/main/img/business_man_in_the_mirror.jpg”。

{{ im.url }} 打印“/media/cache/d0/38/d038a3e64b2c7d070088e368ee881027.jpg”

到目前为止,一切都很好。但是 MEDIA_ROOT 中的缓存文件夹永远不会被创建。MEDIA_ROOT 甚至有 777。我没有看到任何错误./manage.py runserver -v 3。所以我的网页中缺少图像。

runserver 日志显示以下内容:

[10/Aug/2015 18:47:47]"GET /media/cache/d0/38/d038a3e64b2c7d070088e368ee881027.jpg HTTP/1.1" 404 2870

http://localhost:8000/static/main/img/business_man_in_the_mirror.jpg确实向我展示了图像。

我试过了./manage.py thumbnail cleanup./manage.py thumbnail clear但没有效果。我还尝试删除数据库中的kvstore表和缓存表,没有改变。我在缓存中有 5 行,但在 kvstore 表中没有任何内容。

我在这里想念什么?

4

1 回答 1

0

请看一下这个问题:如何缩略图静态文件?. 起初我没有看到它,但它给出了我的问题的答案。

所以如果你做的和我一样,例如在没有设置 MEDIA_ROOT 的情况下缩略图静态图像然后设置 MEDIA_ROOT,这就是它不再起作用的原因。

使用 sorl-thumbnail 提供静态文件不适用于静态图像的 abspath。相反,通过使用http://localhost:8000或 www.example.com之类的内容,在模板中使用 STATIC_URL 作为前缀。

我不知道这种做法在生产环境中的影响,但它cache在本地的 Django 项目的根目录上创建了一个文件夹,这让我暂时不高兴。我暂时选择不为我的静态图像使用缩略图。

于 2015-08-12T16:40:06.247 回答