Django模板中有没有等价于Python字符串乘法的函数?
在Python中,我可以写 "Hello" * 5
,然后得到
HelloHelloHelloHelloHello
有没有办法在Django模板中做到这一点?比如说 {% multiply "Hello" 5 %}
或者作为一个过滤器 {% "Hello"|multiply:"5" %}
或者也许可以用一个“重复”循环控制?像这样:
{% repeat 5 %}
Hello
{% endrepeat %}
我可以自己写一个过滤器或标签,但我在想是否可以省点事。
如果有人能明确告诉我没有我需要的内置功能,那也是一个很好的答案。
2 个回答
19
这里有另一个小技巧:
{% for x in ""|ljust:"100" %}
Hello World!
{% endfor %}
我在这里使用了一个空字符串作为值,然后重复这个操作100次。你也可以用一个变量来决定重复的次数,只需把“100”替换成那个变量就行了 :)
{% for x in ""|ljust:repeat_count %}
Hello World!
{% endfor %}
或者自己做一个...
你可以很简单地制作一个乘法过滤器(关于如何制作自己的模板标签和过滤器的更多信息):
在一个已安装的应用程序中(例如,在你的INSTALLED_APPS设置中包含的),添加一个“templatetags”模块和一个名为“string_multiply.py”的文件。
所以你会有这样的结构:
your_app
+ templatetags
| + __init__.py
| + string_multiply.py
+ __init__.py
+ models.py
加上你应用中的其他内容...
这是你的string_multiply.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
4
没有你需要的那种内置功能。
不过,你可以自己简单地制作一个这样的标签,Django的文档里有一些很有用的例子。
我想你可以用类似于 {% for x in "12345" %}Hello{% endfor %}
的方法拼凑出一个解决方案,但这其实是个很糟糕的办法。