我正在使用这样的代码创建自定义django模板标记:
@register.simple_tag(takes_context=True)
def render_listing(context, *args, **kwargs):
... my code ...
这很有效,但在我的模板中,似乎所有参数都必须在一行上,例如:
这有效:
{% render_listing param1=val1 param2=val2 ... paramN=valN %}
但在多行上,它不起作用:
{% render_listing param1=val1
param2=val2
...
paramN=valN %}
我尝试了多个转义序列,但我没有成功,
有没有办法在多行上指定模板标签?
答案 0 :(得分:7)
不,Django模板语言不支持多行标记。请参阅已关闭为WONTFIX的ticket 8652或来自django-developers邮件列表的this thread。
有时,如果有重复的前缀,您可以使用with标记使其更具可读性。例如,如果你有,
{% render_listing param1=long.common.prefix.val1 param2=long.common.prefix.val2 param2=long.common.prefix.val3 %}
你可以改写为
{% with prefix=long.common.prefix %}
{% render_listing param1=prefix.val1 param2=prefix.val2 param2=prefix.val3 %}
{% endwith %}
通常(但并非总是),一个非常长的标签表明你在模板中放置了太多的逻辑。看看你是否可以将其中的一部分移动到视图,模型方法,模板标签或模板过滤器中。
答案 1 :(得分:4)
启用它非常简单,尽管有点黑:
import re
from django.template import base
base.tag_re = re.compile(base.tag_re.pattern, re.DOTALL)
“使用”很简单;我发现它特别有用的一个地方是{% include %}
标签:
{% include 'my/sweet/modal-template.template' with
message="Hey, do you really want to frob the widget?"
yes="Heck yes I do!"
no="No frickin' way!"
icon="error"
%}
我还没有在Django的最新版本中进行过测试,但是我认为它可以进行修改。至少回到了1.8。我应该指出,从理论上讲,一些对参数进行自定义解析的标签可能会损坏;在实践中,过去十年的Django编程我没有遇到任何麻烦。
参考:http://zachsnow.com/blog/2016/multiline-template-tags-django/