8

我在使用 django-grappeli 和 sorl-thumbnail 的 Django 1.3 时遇到问题。我有一个使用官方 sorl-thumbnails 文档中的代码的项目:

# myapp/admin.py
from django.contrib import admin
from myapp.models import MyModel
from sorl.thumbnail.admin import AdminImageMixin

class MyModelAdmin(AdminImageMixin, admin.ModelAdmin):
    pass

该项目在调试服务器上运行良好,并且在管理员的更改表单中出现了一个漂亮的小缩略图。

但是,在另一个项目中,我通过 WSGI 为我的项目提供服务,并且我有 3 个独立的域:

www.example.com 
media.example.com (that's serving user uploaded files) 
static.example.com (that's serving static files)

但是,在这个项目中, AdminImageMixin 工作正常,只是模型的 changeform 中没有可用的缩略图:

  • 它将图片上传到正确的位置
  • 它将正确的文本放入数据库字段(uploads/ + picture_name.jpg)(我用 phpmyadmin 验证了这一点)
  • 除了浏览按钮之外,它不会在表单中显示任何缩略图(就像我习惯的那样)

这是一些示例代码:

# models.py
class Category(models.Model):
    name = models.CharField(max_length=200, verbose_name='name', help_text='Name of category')
    description = models.TextField(verbose_name='Description', help_text='You can use Textile')
    icon = ImageField(upload_to='uploads/', blank=True, null=True)

# admin.py
class CategoryAdmin(AdminImageMixin, admin.ModelAdmin):
    pass
admin.site.register(Category, CategoryAdmin)

# settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'grappelli',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    'django_evolution',
    'django_extensions',
    'sorl.thumbnail',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

知道我做错了什么吗?

先感谢您。

4

4 回答 4

0

使用调试器检查表单字段是否使用了正确的小部件。

当我从 3 个不同的管理类继承时,我遇到了同样的问题:

  • django-mptt:MPTTModelAdmin
  • django-modeltranslation : TranslationAdmin
  • sorl-thumbnail : AdminImageMixin

我很确定(在我的情况下)django-modeltranslation 正在覆盖 sorl-thumbnail 的行为,从 AdminImageWidget 更改 ImageField 字段的“小部件”属性。

我在 get_form 函数上将小部件强制为 AdminImageWidget,如下所示:

def get_form(self, request, obj=None, **kwargs):
    kwargs = self._do_get_form_or_formset(request, obj, **kwargs)
    form = super(CategoryAdmin, self).get_form(request, obj, **kwargs)

    form.base_fields['background'].widget = AdminImageWidget()

    return form

此时使用混合 AdminImageMixin 是可选的。

于 2014-01-30T22:46:05.540 回答
0

您是否记得将其sorl.thumbnail放入您的INSTALLED_APPS并在其后同步数据库。如果您没有键值对表,则它不会起作用。我想您使用默认数据库作为键值存储,而不是 redis。

于 2011-08-26T11:12:57.773 回答
0

我遇到了同样的问题,结果我安装的 PIL 没有 jpeg 支持来制作实际的缩略图,尽管它从未显示任何错误。这就是我修复它的方法:

  • 安装 JPEG 支持

    sudo apt-get install libjpeg libjpeg-dev
    

在 MAC 上:

brew install jpeg
  • 重新安装 PIL

    pip install -I PIL
    

重新编译后它应该显示 jpeg 支持可用,刷新您的管理页面,您应该会看到缩略图。

于 2013-06-09T22:05:25.303 回答
0

./manage.py makemigrations thumbnail ./manage.py migrate thumbnail

如果您遇到权限问题,请查看 https://stackoverflow.com/a/41541666

于 2017-01-20T18:02:32.040 回答