Найти - Пользователи
Полная версия: Whitespace control в jinja2
Начало » Python для новичков » Whitespace control в jinja2
1
Stright
Имеется такой шаблон:
 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 не установлено?
FishHook
Stright
Странно, что она вообще там появляется, если я правильно все понимаю, HTML обязан игнорировать переводы строк и пробелы. Это всё у вас не в <pre> теге происходит случайно? Вообще, можете показать, что получается после рендеринга?
Stright
Это не 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
FishHook
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 -%}
Stright
Не совсем, если время есть, то ваш вариант печатает вот что:
 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'ом что-то не доходит.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB