Django模板中有没有等价于Python字符串乘法的函数?

7 投票
2 回答
3106 浏览
提问于 2025-04-17 08:30

在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 %} 的方法拼凑出一个解决方案,但这其实是个很糟糕的办法。

撰写回答