在python中我可以写"Hello" * 5
并获取
HelloHelloHelloHelloHello
有没有办法在django模板中执行此操作?像{% multiply "Hello" 5 %}
或过滤器{% "Hello"|multiply:"5" %}
或者可能是“重复”循环控制?类似的东西:
{% repeat 5 %}
Hello
{% endrepeat %}
我可以自己写一个过滤器或标签,但想知道我是否可以省去一些麻烦。
如果某人可以权威地说没有我所要求的内置功能,那将是一个完全可以接受的答案。
答案 0 :(得分:18)
这是另一个黑客:
{% for x in ""|ljust:"100" %}
Hello World!
{% endfor %}
我在这里使用空字符串作为值,我重复100x。您还可以使用变量来确定此hack的重复次数:)只需将“100”替换为变量。
{% for x in ""|ljust:repeat_count %}
Hello World!
{% endfor %}
你可以很容易地制作乘法滤波器(more on making your own template tags and filters):
在已安装的应用中(例如,包含在您的INSTALLED_APPS设置中),添加“templatetags”模块和名为“string_multiply.py”的文件
所以你会有这样的事情:
your_app
+ templatetags
| + __init__.py
| + string_multiply.py
+ __init__.py
+ models.py
加上您在应用中的其他内容......
from django.template import Library
register = Library()
@register.filter
def multiply(string, times):
return string * times
是的,这就是整个事情......
{% load string_multiply %}
Chris Brown:
{% filter multiply:3 %}
Yeah!
{% endfilter %}
You (x5):
{{ request.user.username|multiply:5 }}
输出结果为:
Chris Brown:
Yeah!
Yeah!
Yeah!
You (x5):
Koliber ServicesKoliber ServicesKoliber ServicesKoliber ServicesKoliber Services
答案 1 :(得分:4)
没有您需要的内置功能。</ p>
这对于自己来说是一个微不足道的标记 - 在Django文档中有一些有用的例子。
我想你可以通过使用类似{% for x in "12345" %}Hello{% endfor %}
的东西来破解某些东西,但这是一个可怕的黑客攻击。