Уведомления

Группа в Telegram: @pythonsu

#1 Март 7, 2019 14:33:45

Stright
От: Кострома
Зарегистрирован: 2015-01-20
Сообщения: 139
Репутация: +  16  -
Профиль   Отправить e-mail  

Whitespace control в jinja2

Имеется такой шаблон:

 Purchase order {{ order.order_no }}
Status {{ order.status | upper }}
Supplied by - {{ order.supplier_name }}
{% if order.received_datetime %}Received date - {{ order.received_datetime }}{% endif %}
{% for line in order.lines -%}
{{ line.product_name }}, quantity - {{ line.quantity }}
{% endfor -%}
И такой код, его использующий:
 from jinja2 import Environment, FileSystemLoader
template_env = Environment(loader=FileSystemLoader('./'))
class PurchaseOrderLine:
    def __init__(self, product_name, quantity):
        self.product_name = product_name
        self.quantity = quantity
class PurchaseOrder:
    def __init__(self, order_no, supplier_name, received_datetime=None):
        self.order_no = order_no
        self.status = 'draft'
        self.supplier_name = supplier_name
        self.received_datetime = received_datetime
        self.lines = []
    def add_line(self, line):
        self.lines.append(line)
if __name__ == '__main__':
    order = PurchaseOrder(1, 'Supplier')
    order.add_line(PurchaseOrderLine(product_name='Bread', quantity=2))
    order.add_line(PurchaseOrderLine(product_name='Milk', quantity=3))
    template = template_env.get_template('order.txt')
    text = template.render({'order': order})
    print(text)
Как убрать пустую лишнюю строку после строки “Supplied by - Supplier” при рендеринге шаблона, если время order.received_datetime не установлено?

Отредактировано Stright (Март 7, 2019 14:59:38)

Офлайн

#2 Март 7, 2019 15:12:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Whitespace control в jinja2

Stright
Странно, что она вообще там появляется, если я правильно все понимаю, HTML обязан игнорировать переводы строк и пробелы. Это всё у вас не в <pre> теге происходит случайно? Вообще, можете показать, что получается после рендеринга?



Офлайн

#3 Март 7, 2019 15:16:27

Stright
От: Кострома
Зарегистрирован: 2015-01-20
Сообщения: 139
Репутация: +  16  -
Профиль   Отправить e-mail  

Whitespace control в jinja2

Это не html, я пытаюсь сгенерировать текст
Вывод, если время установлено:

Purchase order 1
Status DRAFT
Supplied by - Supplier
Received date - 2019-03-07 13:19:14.589757
Bread, quantity - 2
Milk, quantity - 3
Если не установлено, то:
Purchase order 1
Status DRAFT
Supplied by - Supplier

Bread, quantity - 2
Milk, quantity - 3

Отредактировано Stright (Март 7, 2019 15:20:41)

Офлайн

#4 Март 7, 2019 16:10:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Whitespace control в jinja2

Stright
Так?

 Purchase order {{ order.order_no }}
Status {{ order.status | upper }}
Supplied by - {{ order.supplier_name }}{% if order.received_datetime %}\nReceived date - {{ order.received_datetime }}{% endif %}
{% for line in order.lines -%}
{{ line.product_name }}, quantity - {{ line.quantity }}
{% endfor -%}



Офлайн

#5 Март 7, 2019 21:09:21

Stright
От: Кострома
Зарегистрирован: 2015-01-20
Сообщения: 139
Репутация: +  16  -
Профиль   Отправить e-mail  

Whitespace control в jinja2

Не совсем, если время есть, то ваш вариант печатает вот что:

 Purchase order 1
Status DRAFT
Supplied by - Supplier\nReceived date - 2019-03-07 19:01:39.410241
Bread, quantity - 2
Milk, quantity - 3

Но большое спасибо за идею, сделал так:
 Purchase order {{ order.order_no }}
Status {{ order.status | upper }}
Supplied by - {{ order.supplier_name }}{% if order.received_datetime %}
Received datetime - {{ order.received_datetime }}{% endif %}
{% for line in order.lines -%}
{{ line.product_name }}, quantity - {{ line.quantity }}
{% endfor -%}

If'ы на предыдущей строке выглядят не очень читаемо, тем более у меня в настоящем шаблоне их несколько подряд идет, но результат тот, что мне нужен. На самом деле я пытался использовать вот этот механизм шаблонизатора: http://jinja.pocoo.org/docs/2.10/templates/#whitespace-control, с циклом и переменными вообщем-то понятно, как это использовать, но с if'ом что-то не доходит.

Отредактировано Stright (Март 7, 2019 21:23:17)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version