|
@@ -0,0 +1,83 @@
|
|
|
+from jinja2 import Template
|
|
|
+from markupsafe import escape
|
|
|
+
|
|
|
+
|
|
|
+class Person:
|
|
|
+ def __init__(self, name, age):
|
|
|
+ self.name = name
|
|
|
+ self.age = age
|
|
|
+
|
|
|
+ def get_name(self):
|
|
|
+ return self.name
|
|
|
+
|
|
|
+ def get_age(self):
|
|
|
+ return self.age
|
|
|
+
|
|
|
+
|
|
|
+def test_1():
|
|
|
+ name = "Федор"
|
|
|
+ age = 28
|
|
|
+
|
|
|
+ per = Person("Федор", 22)
|
|
|
+
|
|
|
+ tm = Template("Мне {{ p.get_age() }} лет и зовут {{ p.get_name() }}.")
|
|
|
+ msg = tm.render(p = per)
|
|
|
+ print(msg)
|
|
|
+
|
|
|
+'''
|
|
|
+Экранирование и блоки raw, for, if
|
|
|
+'''
|
|
|
+
|
|
|
+data = '''{% raw %}Модуль Jinja вместо
|
|
|
+определения {{ name }}
|
|
|
+подставляет соответствующее значение{% endraw %}'''
|
|
|
+
|
|
|
+link = '''В HTML-документе ссылки определяются как:
|
|
|
+<a href="#">Ссылка</a>'''
|
|
|
+
|
|
|
+def test_2():
|
|
|
+ tm = Template(data)
|
|
|
+ msg = tm.render()
|
|
|
+ print(msg)
|
|
|
+
|
|
|
+def test_3():
|
|
|
+ tm = Template("{{ link | e}}")
|
|
|
+ msg = tm.render(link=link)
|
|
|
+ print(msg)
|
|
|
+
|
|
|
+def test_4():
|
|
|
+ msg = escape(link)
|
|
|
+ print(msg)
|
|
|
+
|
|
|
+
|
|
|
+'''Блок for, if'''
|
|
|
+
|
|
|
+cities = [{'id':1, 'city': 'Москва'},
|
|
|
+ {'id':5, 'city': 'Тверь'},
|
|
|
+ {'id':7, 'city': 'Минск'},
|
|
|
+ {'id':8, 'city': 'Смоленск'},
|
|
|
+ {'id':11, 'city': 'Калуга'}]
|
|
|
+
|
|
|
+link = '''<select name="cities">
|
|
|
+{% for c in cities -%}
|
|
|
+{% if c.id > 6 -%}
|
|
|
+ <option value="{{c['id']}}">{{c['city']}}</option>
|
|
|
+{% elif c.city == "Москва" -%}
|
|
|
+ <option>{{c['city']}}</option>
|
|
|
+{% else -%}
|
|
|
+ {{c['city']}}
|
|
|
+{% endif -%}
|
|
|
+{% endfor -%}
|
|
|
+</select>'''
|
|
|
+
|
|
|
+def test_5():
|
|
|
+ tm = Template(link)
|
|
|
+ msg = tm.render(cities=cities)
|
|
|
+ print(msg)
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ test_5()
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|