Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2015 22:57:45

PyNovice
Зарегистрирован: 2014-09-18
Сообщения: 17
Репутация: +  2  -
Профиль   Отправить e-mail  

Генерация html, шаблонизатор jinja2

Что-то не совсем понял можно ли из child шаблона в вставлять в родительский методом итерирования. Например родительский шаблон

<html>
<head></head>
<body>
{% block content %}{% endblock %}
</body>
</html>
Child шаблон
{% extends "template.html" %}
{% block content %}
<p>{{x}}</p>
{% endblock %}

И на лету меняя значение X вставлять в исходный чтобы получилось что-то вроде
<html>
<head></head>
<body>
<p>Вася</p>
<p>Коля</p>
<p>Машина</p>
<p>12</p>
</body>
</html>

Вообще мне нужно сгенерировать yml файлик для маркета. Может я занимаюсь извращением и есть более удобные инструменты? Просто шаблонизатор это первое что пришло в голову.

Офлайн

#2 Фев. 5, 2015 04:32:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Генерация html, шаблонизатор jinja2

>>> doc = '''<html>
...   <head></head>
...   <body>
... {}
...   </body>
... </html>'''
>>> 
>>> cont = '<p>{}</p>'
>>> 
>>> lst = ['a a', 'b b', 'c c']
>>> 
>>> out = doc.format('\n'.join(map(cont.format, lst)))
>>> print(out)
<html>
  <head></head>
  <body>
<p>a a</p>
<p>b b</p>
<p>c c</p>
  </body>
</html>
>>>



Офлайн

#3 Фев. 5, 2015 19:31:16

PyNovice
Зарегистрирован: 2014-09-18
Сообщения: 17
Репутация: +  2  -
Профиль   Отправить e-mail  

Генерация html, шаблонизатор jinja2

Спасибо. Я тоже сперва об этом подумал. Но потом решил что засовывать html код внутрь питон кода не очень хороший тон. Хотя, наверное, это действительно самое простое решение.

Офлайн

#4 Фев. 6, 2015 07:56:05

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Генерация html, шаблонизатор jinja2

Может я чего не понял, но вроде все просто.

from jinja2 import FileSystemLoader, Environment
env = Environment(loader=FileSystemLoader('.'), )
template = env.get_template('child')
result = template.render(data=['Вася', 'Коля', 'Машина', 12])
out = open('out', 'w', encoding='utf8')
out.write(result)
out.close()

Шаблон base
<html>
    <head></head>
    <body>
        {% block content %}{% endblock %}
    </body>
</html>

Шаблон child
{% extends "base" %}
{% block content %}
    {%- for i in data %}
        <p>{{i}}</p>
    {%- endfor %}
{% endblock %}

Офлайн

#5 Фев. 7, 2015 01:26:48

PyNovice
Зарегистрирован: 2014-09-18
Сообщения: 17
Репутация: +  2  -
Профиль   Отправить e-mail  

Генерация html, шаблонизатор jinja2

alex925
Шаблон child
{% extends "base" %}
{% block content %}
    {%- for i in data %}
        <p>{{i}}</p>
    {%- endfor %}
{% endblock %}
Да, именно тот эффект которого я и хотел добиться. Что-то for вставить в child совсем не додумался.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version