我正在使用这样的代码创建自定义django模板标记:
@register.simple_tag(takes_context=True)
def render_listing(context, *args, **kwargs):
... my code ...
Run Code Online (Sandbox Code Playgroud)
这很好用,但在我的模板中,似乎所有参数都必须在一行上,例如:
这工作:
{% render_listing param1=val1 param2=val2 ... paramN=valN %}
Run Code Online (Sandbox Code Playgroud)
但是在多行上,它不起作用:
{% render_listing param1=val1
param2=val2
...
paramN=valN %}
Run Code Online (Sandbox Code Playgroud)
我尝试了多个转义序列,但我没有成功,
有没有办法在多行上指定模板标签?
Ala*_*air 11
不,Django模板语言不支持多行标记.查看作为WONTFIX关闭的故障单8652,或者来自django-developers邮件列表的此线程.
有时,如果存在重复的前缀,则可以使用with标记使其更具可读性.例如,如果你有,
{% render_listing param1=long.common.prefix.val1 param2=long.common.prefix.val2 param2=long.common.prefix.val3 %}
Run Code Online (Sandbox Code Playgroud)
你可以重写为
{% with prefix=long.common.prefix %}
{% render_listing param1=prefix.val1 param2=prefix.val2 param2=prefix.val3 %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
通常(但并非总是),一个非常长的标签表明你在模板中放置了太多的逻辑.看看你是否可以将其中的一部分移动到视图,模型方法,模板标签或模板过滤器中.
尽管有点黑,但启用起来非常简单:
import re
from django.template import base
base.tag_re = re.compile(base.tag_re.pattern, re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
“使用”很简单;我发现它特别有用的一个地方是{% 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"
%}
Run Code Online (Sandbox Code Playgroud)
我没有在较新版本的Django中进行过测试,但我认为可以对其进行调整。至少回到了1.8。我应该指出,从理论上讲,一些对参数进行自定义解析的标签可能会损坏;实际上,在Django编程的最后10年中,我没有遇到任何麻烦。
参考:http: //zachsnow.com/blog/2016/multiline-template-tags-django/
归档时间: |
|
查看次数: |
2926 次 |
最近记录: |