我正在开发和使用两个独立的模块化Django应用程序的项目。但是,一个应用程序需要简单的缩略图,另一个需要索引缩略图。不幸的是,这两个缩略图库使用了模板标记语法{%load thumbnail%},因此当使用它们的模板尝试渲染时,它们会发生冲突和中断。
有没有办法解决这种类型的冲突? (例如,模板选项会影响{%load thumbnail as easy_thumbnail%})。我是否必须分叉其中一个应用程序并将其中一个缩略图库替换为另一个?如果是这样,我应该选择哪一个?
感谢您考虑我的问题, 乔
答案 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包装器......
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
位,但我没有尝试过。
答案 2 :(得分: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/)
答案 3 :(得分:2)
更新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