TelenkovDmitry 3 months ago
parent
commit
647c76fbb5
2 changed files with 107 additions and 1 deletions
  1. 4 1
      .vscode/settings.json
  2. 103 0
      courses/jinja/filter.py

+ 4 - 1
.vscode/settings.json

@@ -1,3 +1,6 @@
 {
-    "editor.rulers": [80]
+    "editor.rulers": [
+        80
+    ],
+    "python.analysis.typeCheckingMode": "basic"
 }

+ 103 - 0
courses/jinja/filter.py

@@ -0,0 +1,103 @@
+from jinja2 import Template
+
+
+cars = [
+    {'model': 'Ауди', 'price': 23000},
+    {'model': 'Шкода', 'price': 17300},
+    {'model': 'Вольво', 'price': 44300},
+    {'model': 'Фольксваген', 'price': 21300},
+]
+
+
+'''
+sum(iterable, attribute=None, start=0)
+max
+'''
+
+def test_1():
+    # tpl = "{{ cs }}" # просто выводит коллекцию
+
+    # tpl = "Суммарная цена автомобилей {{ cs | sum(attribute='price') }}"
+
+    # tpl = "Автомобиль с максимальной ценой {{ (cs | max(attribute='price')).model }}"
+
+    # Случайный автомобиль
+    # tpl = "Автомобиль: {{ cs | random }}"
+
+    # Замена символов
+    tpl = "Автомобиль: {{ cs | replace('о', 'О') }}"
+    
+    tm = Template(tpl)
+    msg = tm.render(cs = cars)
+    print(msg)
+
+
+'''
+Применение фильтров внутри шаблонов
+
+'''
+
+persons = [
+    {"name": "Алексей", "old": 18, "weight": 78.5},
+    {"name": "Николай", "old": 28, "weight": 82.5},
+    {"name": "Иван", "old": 33, "weight": 94.0}
+]
+
+
+def test_2():
+    tpl = '''
+    {%- for u in users -%}
+    {% filter upper %}{{u.name}}{% endfilter %}
+    {% endfor -%}
+    '''
+    tm = Template(tpl)
+    msg = tm.render(users = persons)    
+    print(msg)
+
+
+# Макросы и вложенные макросы
+def test_3():
+    html = '''
+    {% macro input(name, value='', type='text', size=20) -%}
+        <input type="{{ type }}" name="{{ name }}" value="{{ value|e }}" size="{{ size }}">
+    {%- endmacro %}
+
+    <p>{{ input('username') }}
+    <p>{{ input('email') }}
+    <p>{{ input('password') }}
+    '''
+
+    tm = Template(html)
+    msg = tm.render()
+    print(msg)
+
+# Вложенные макросы
+def test_4():
+    html = '''
+    {% macro list_users(list_of_user) -%}
+    <ul>
+    {% for u in list_of_user -%}
+        <li>{{u.name}} {{caller(u)}}
+    {%- endfor %}
+    </ul>
+    {%- endmacro %}
+
+    {% call(user) list_users(users) %}
+        <ul>
+        <li>age: {{user.old}}
+        <li>weight: {{user.weight}}
+        </ul>
+    {% endcall -%}
+
+    '''
+    tm = Template(html)
+    msg = tm.render(users = persons)
+    print(msg)
+
+
+def main():
+    test_4()
+
+
+if __name__ == '__main__':
+    main()