是否有一个django模板相当于python字符串乘法函数?

时间:2011-12-16 16:01:13

标签: python django django-templates django-template-filters

在python中我可以写"Hello" * 5并获取

HelloHelloHelloHelloHello

有没有办法在django模板中执行此操作?像{% multiply "Hello" 5 %}或过滤器{% "Hello"|multiply:"5" %}

之类的东西

或者可能是“重复”循环控制?类似的东西:

{% repeat 5 %}
Hello
{% endrepeat %}

我可以自己写一个过滤器或标签,但想知道我是否可以省去一些麻烦。

如果某人可以权威地说没有我所要求的内置功能,那将是一个完全可以接受的答案。

2 个答案:

答案 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

加上您在应用中的其他内容......

这是你的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

答案 1 :(得分:4)

没有您需要的内置功能。<​​/ p>

这对于自己来说是一个微不足道的标记 - 在Django文档中有一些有用的例子。

我想你可以通过使用类似{% for x in "12345" %}Hello{% endfor %}的东西来破解某些东西,但这是一个可怕的黑客攻击。