【问题标题】:Is there a django template equivalent of the python string multiplication function?是否有等效于 python 字符串乘法函数的 django 模板?
【发布时间】:2012-01-22 03:11:09
【问题描述】:

在python中我可以写"Hello" * 5并得到

HelloHelloHelloHelloHello

有没有办法在 django 模板中做到这一点?类似{% multiply "Hello" 5 %} 或过滤器{% "Hello"|multiply:"5" %}

或者也许是“重复”循环控制?比如:

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

我可以自己编写过滤器或标记,但想知道是否可以为自己省点麻烦。

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

【问题讨论】:

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


    【解决方案1】:

    这是另一个技巧:

    {% for x in ""|ljust:"100" %}
        Hello World!
    {% endfor %}
    

    我在这里使用一个空字符串作为值,我重复了 100 次。您还可以使用变量来确定此 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
    

    【讨论】:

      【解决方案2】:

      没有您需要的内置功能。

      这将是为自己制作的一个微不足道的标签 - Django 文档中有一些有用的示例。

      我想你可以使用 {% for x in "12345" %}Hello{% endfor %} 之类的东西一起破解某些东西,但那是一种可怕的破解。

      【讨论】:

      • 我喜欢黑客!它可能不漂亮,但可以完成工作,而且非常清晰。
      • 哈哈,也许我不应该把它放在那里 - 请记住,其他人可以在你之后处理这段代码,并希望坏事发生在你身上;)
      猜你喜欢
      • 2017-11-29
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2017-01-21
      相关资源
      最近更新 更多