13

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

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

谢谢你考虑我的问题,乔

4

4 回答 4

13

在 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',
            },
        },
    },
]

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 %}
于 2016-02-03T00:17:57.453 回答
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 %}

笔记:

您也许还可以将缩略图导入为 easy_thumbnail,然后跳过这def easy_thumbnail一点,尽管我没有尝试过。

于 2011-11-18T14:09:58.713 回答
6

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

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/

于 2012-11-09T07:37:20.757 回答
2

2015 年更新

为了使它起作用,我必须对汤姆克里斯蒂的回答进行以下修改:

  1. 在您的一个本地应用程序中创建一个templatetags包。命名它很重要templatetags。有关模板标签,请参阅django 文档
  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

于 2015-10-15T09:39:27.520 回答