test.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from jinja2 import Template
  2. from markupsafe import escape
  3. class Person:
  4. def __init__(self, name, age):
  5. self.name = name
  6. self.age = age
  7. def get_name(self):
  8. return self.name
  9. def get_age(self):
  10. return self.age
  11. def test_1():
  12. name = "Федор"
  13. age = 28
  14. per = Person("Федор", 22)
  15. tm = Template("Мне {{ p.get_age() }} лет и зовут {{ p.get_name() }}.")
  16. msg = tm.render(p = per)
  17. print(msg)
  18. '''
  19. Экранирование и блоки raw, for, if
  20. '''
  21. data = '''{% raw %}Модуль Jinja вместо
  22. определения {{ name }}
  23. подставляет соответствующее значение{% endraw %}'''
  24. link = '''В HTML-документе ссылки определяются как:
  25. <a href="#">Ссылка</a>'''
  26. def test_2():
  27. tm = Template(data)
  28. msg = tm.render()
  29. print(msg)
  30. def test_3():
  31. tm = Template("{{ link | e}}")
  32. msg = tm.render(link=link)
  33. print(msg)
  34. def test_4():
  35. msg = escape(link)
  36. print(msg)
  37. '''Блок for, if'''
  38. cities = [{'id':1, 'city': 'Москва'},
  39. {'id':5, 'city': 'Тверь'},
  40. {'id':7, 'city': 'Минск'},
  41. {'id':8, 'city': 'Смоленск'},
  42. {'id':11, 'city': 'Калуга'}]
  43. link = '''<select name="cities">
  44. {% for c in cities -%}
  45. {% if c.id > 6 -%}
  46. <option value="{{c['id']}}">{{c['city']}}</option>
  47. {% elif c.city == "Москва" -%}
  48. <option>{{c['city']}}</option>
  49. {% else -%}
  50. {{c['city']}}
  51. {% endif -%}
  52. {% endfor -%}
  53. </select>'''
  54. def test_5():
  55. tm = Template(link)
  56. msg = tm.render(cities=cities)
  57. print(msg)
  58. def main():
  59. test_5()
  60. if __name__ == '__main__':
  61. main()