Django:同一个项目中的sorl-thumbnail和easy-thumbnail

Joe*_*e J 12 django templates image thumbnails sorl-thumbnail

我正在开发和使用两个独立的模块化Django应用程序的项目.但是,一个应用程序需要简单的缩略图,另一个需要索引缩略图.不幸的是,这两个缩略图库使用了模板标记语法{%load thumbnail%},因此当使用它们的模板尝试渲染时,它们会发生冲突和中断.

有没有办法解决这种类型的冲突?(例如,模板选项会影响{%load thumbnail as easy_thumbnail%}).我是否必须分叉其中一个应用程序并将其中一个缩略图库替换为另一个?如果是这样,我应该选择哪个?

谢谢你考虑我的问题,乔

mni*_*ber 12

在Django 1.9中,您可以使用libraries选项DjangoTemplates在指定名称下包含标记库.在下面的示例中,缩略图库sorl.thumbnail包含在名称下sorl_thumbnail.

注意:模板标签本身在模板中没有改变... 即.遗迹thumbnail

用法:

settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "foo", "templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'libraries': {
                'sorl_thumbnail': 'sorl.thumbnail.templatetags.thumbnail',
            },
        },
    },
]
Run Code Online (Sandbox Code Playgroud)

your_template.html

{% load sorl_thumbnail %}
{% thumbnail mymodel.image "640x480" crop="center" as im %}
    <img src="{{ im.url }}" width="{{im.width}}" height="{{im.height}}"/>
{% endthumbnail %}
Run Code Online (Sandbox Code Playgroud)


Tom*_*tie 11

当然,只需编写自己的存根easy_thumbnail包装器......

  1. thumbnailtags在你的一个django应用程序中创建一个包...
  2. ......确保它是空的 __init__.py
  3. thumbnailtags/easy_thumbnail.py做类似的事情:

    from django.template import Library
    from easy_thumbnails.templatetags import thumbnail
    
    register = Library()    
    
    def easy_thumbnail(parser, token):
        return thumbnail(parser, token)
    
    register.tag(easy_thumbnail)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用 {% load easy_thumbnail %}

注意:

您也可以将'导入缩略图作为easy_thumbnail,然后跳过这def easy_thumbnail一点,我没有尝试过.