Существует ли шаблон django, эквивалентный функции умножения строк python? - PullRequest
7 голосов
/ 16 декабря 2011

В Python я могу написать "Hello" * 5 и получить

HelloHelloHelloHelloHello

Есть ли способ сделать это в шаблоне Django?Что-то вроде {% multiply "Hello" 5 %} или как фильтр {% "Hello"|multiply:"5" %}

Или, может быть, "повторное" управление циклом?Что-то вроде:

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

Я могу написать фильтр или пометить сам, но мне было интересно, смогу ли я избавить себя от некоторых проблем.

Если кто-то может авторитетно сказать, что нет встроенноготакая возможность, как мне требуется, это будет вполне приемлемый ответ.

Ответы [ 2 ]

18 голосов
/ 16 декабря 2011

Вот еще один взлом:

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

Я использую пустую строку в качестве значения здесь, и я повторяю вещь 100x. Вы также можете использовать переменную для определения количества повторов с помощью этого хака :) просто замените «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 голосов
/ 16 декабря 2011

Нет такой встроенной возможности, какой вам требуется.

Это было бы тривиальным тегом для себя - в Django есть несколько полезных примеров.

Полагаю, вы могли бы взломать что-то вместе, используя что-то вроде {% for x in "12345" %}Hello{% endfor %}, но это ужасный взлом.

...