我用棺材到的Jinja2集成了的Django應用將物體放入模板通過的Jinja2 Django的應用程序。我想在我的Jinja2模板中使用sorl應用程序。所以我決定寫我自己的擴展標籤{%thumbnail%}。我決定用一個很好的WithExtension作爲一個例子,從一個箱子出來的棺材。如何使用棺材
我的擴展:
class ThumbnailExtension(Extension):
tags = set(['thumbnail'])
def parse(self, parser):
lineno = parser.stream.next().lineno
value = parser.parse_expression()
im = get_thumbnail(value.value, "100x100")
parser.stream.expect('name:as')
name = parser.stream.expect('name')
body = parser.parse_statements(['name:endthumbnail'], drop_needle=True)
# Use a local variable instead of a macro argument to alias
# the expression. This allows us to nest "with" statements.
body.insert(0, nodes.Assign(nodes.Name(name.value, 'store'), im))
return nodes.CallBlock(
self.call_method('_render_block'), [], [], body).\
set_lineno(lineno)
def _render_block(self, caller=None):
return caller()
我的模板:
{% thumbnail "jinja.png" as img %}
{{ img.url }}
{% endthumbnail %}
,但我得到一個AttributeError: 'ImageFile' object has no attribute 'iter_child_nodes'
它`看來,我應該通過一個jinja2.nodes.Node對象作爲第二個參數傳遞給nodes.Assign()。我應該怎麼做?
謝謝,這完美的作品!我想你只是在你的templatetag文件中缺少一個「from sorl.thumbnail.shortcuts import get_thumbnail」。 – mrooney
@mrooney謝謝。我已經更新了我的答案 –