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

Posted

技术标签:

【中文标题】Django:sorl-thumbnail 和 easy-thumbnail 在同一个项目中【英文标题】:Django: sorl-thumbnail and easy-thumbnail in same project 【发布时间】:2011-12-31 17:27:10 【问题描述】:

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

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

感谢您考虑我的问题, 乔

【问题讨论】:

你应该试试github.com/codysoyland/django-smart-load-tag :) 这是一个非常简洁的模块,似乎可以解决这个问题。我想我看到了一张 django 票,可以为 django trunk 添加类似的功能。我希望它能成功。很高兴这个模块存在于当前和过去的 django 实例中。 【参考方案1】:

在 Django 1.9 中,您可以使用 DjangoTemplateslibraries 选项来包含指定名称下的标签库。在下面的示例中,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',
            ,
        ,
    ,
]

your_template.html

% load sorl_thumbnail %
% thumbnail mymodel.image "640x480" crop="center" as im %
    <img src=" im.url "  />
% endthumbnail %

【讨论】:

哇,这太棒了,而且是一个非常需要的功能! 如果您有两个不同的第三方应用程序,并且都执行% load thumbnail %,是否有解决方案?【参考方案2】:

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

    在您的一个 django 应用程序中创建一个 thumbnailtags 包... ...确保它有一个空的__init__.py

    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)
    
    使用% load easy_thumbnail %

注意:

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

【讨论】:

【参考方案3】:

此博客链接显示了如何处理此问题。

https://timmyomahony.com/blog/using-sorl-thumbnail-and-easy-thumbnails-same-template/

(以前 http://timmyomahony.com/blog/2012/10/22/using-sorl-thumbnail-and-easy-thumbnails-same-template/)

【讨论】:

更正响应以显示新网址 - timmyomahony.com/blog/…【参考方案4】:

2015 年更新

我必须对 Tom Christie 的回答进行以下修改才能使其正常工作:

    在其中一个本地应用程序中创建一个templatetags 包。将其命名为 templatetags 很重要。模板标签见django docs。 ...确保它有一个__init__.py,无论是否为空。

    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)
    

    % load easy_thumbnail %- load easy_thumbnail 与pyjade 一起使用

【讨论】:

以上是关于Django:sorl-thumbnail 和 easy-thumbnail 在同一个项目中的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 django 中为 sorl-thumbnail 设计清理任务?

django - 关于 sorl-thumbnail 的注意事项

Django:模板中的 sorl-thumbnail

在 Elastic Beanstalk 上使用 Django + easy-thumbnails/sorl-thumbnail

Django 简单缩略图与 sorl-thumbnail 的区别