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

时间:2011-11-17 20:51:45

标签: django image templates thumbnails sorl-thumbnail

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

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

感谢您考虑我的问题, 乔

4 个答案:

答案 0 :(得分:12)

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

  

注意:模板标签本身未在模板中更改... ie。仍为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', }, }, }, ]

your_template.html

答案 1 :(得分:11)

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

  1. 在您的某个django应用中创建thumbnailtags个包...
  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)
    
  4. 使用{% load easy_thumbnail %}
  5. 注意:

    您也可以将'导入缩略图作为easy_thumbnail,并跳过def easy_thumbnail位,但我没有尝试过。

答案 2 :(得分:6)

答案 3 :(得分:2)

更新2015

我必须对Tom Christie的答案进行以下修改才能使其发挥作用:

  1. 在您的一个本地应用中创建一个templatetags包。将其命名为templatetags非常重要。有关模板标记,请参阅django docs
  2. ...确保它有__init__.py,空或不。
  3. templatetags/easy_thumbnail.py执行此操作:

    from django.template import Library
    from easy_thumbnails.templatetags import thumbnail
    
    register = Library()    
    
    def easy_thumbnail(parser, token):
        return thumbnail.thumbnail(parser, token) # the important bit
    
    register.tag(easy_thumbnail)
    
  4. 使用{% load easy_thumbnail %}- load easy_thumbnailpyjade