«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > django-comComponents v Шаблонизация теперь находится на одном уровне с Vue или React.

django-comComponents v Шаблонизация теперь находится на одном уровне с Vue или React.

Опубликовано 8 ноября 2024 г.
Просматривать:933

django-components v Templating is now on par with Vue or React

Привет, я Джуро, я один из сопровождающих компонентов django. В выпусках v0.90–0.94 мы добавили функции, которые делают использование компонентов в шаблонах более гибким, аналогично JSX/Vue.

(Эта информация уже немного устарела (выпущена месяц назад; последняя версия 0.101), так как я занят добавлением поддержки переменных JS/CSS, TypeScript и Sass, а также фрагмента HTML. Захватывающая штука! Но я понял, что еще не поделился этим обновлением!)

В любом случае, ниже приведен компонент blog_post, который принимает заголовок, идентификатор и дополнительные kwargs, применяемые из blog_post_props:

    {% blog_post
      title="{{ person.first_name }} {{ person.last_name }}"
      id="{% random_int 10 20 %}"
      ...blog_post_props
    / %}

Вышеуказанное представляет собой комбинацию нескольких функций:

1. Самозакрывающиеся теги:

Вместо

    {% component "my_component" %}
    {% endcomponent %}

Теперь вы можете просто написать

    {% component "my_component" / %}

2. Многострочные теги:

django_comComponents теперь автоматически настраивает Django для поддержки многострочных тегов. Поэтому вместо того, чтобы запихивать все в одну строку:

    {% component "blog_post" title="abcdef..." author="John Wick" date_published="2024-08-28" %}
    {% endcomponent %}

Вы можете разделить его на несколько строк:

    {% component "blog_post"
      title="abcdef..."
      author="John Wick"
      date_published="2024-08-28"
    / %}

3. Оператор распространения:

Подобно оператору ...props в JSX или v-bind во Vue, он вставляет реквизиты/kwargs в заданную позицию.

Так что вместо

    {% component "blog_post"
      title="abcdef..."
      author="John Wick"
      date_published="2024-08-28"
    / %}

Вы можете иметь кварги в словаре, а затем применять это:

    # Python
    props = {
        "title": "abcdef...",
        "author": "John Wick",
        "date_published": "2024-08-28"
    }
    {# Django #}
    {% component "blog_post" ...props %}

4. Теги шаблонов внутри строковых литералов во входных данных компонента:

Теперь вы можете использовать теги шаблонов и фильтры внутри входных данных компонента:

    {% component 'blog_post'
      "As positional arg {# yay #}"
      title="{{ person.first_name }} {{ person.last_name }}"
      id="{% random_int 10 20 %}"
      readonly="{{ editable|not }}"
    / %}

Таким образом, вам не придется определять дополнительные переменные каждый раз, когда вам нужно отформатировать значение.

Обратите внимание: если имеется только один тег и вокруг него нет дополнительного текста, результат передается как значение. Таким образом, "{% rand_int 10 20 %}" передает число, а "{{ editable|not }}" передает логическое значение.

Вы даже можете пойти еще дальше и получить опыт, аналогичный Vue или React, где вы можете оценивать произвольные выражения кода, аналогичные этому:

    

Это возможно с помощью django-expr, который добавляет тег expr и фильтр, которые можно использовать для оценки выражений Python из шаблона:

    {% component "my_form"
      value="{% expr 'input_value if is_enabled else None' %}"
    / %}

5. Поддержка {% comp_name %} {% endcomp_name %} и TagFormatter

По умолчанию компоненты записываются с использованием тега компонента, за которым следует имя компонента:

    {% component "button" href="..." disabled %}
        Click me!
    {% endcomponent %}

Теперь вы можете изменить это (и даже создать свое собственное!).

Например, установка для COMPONENTS.tag_formatter значения «django_comComponents.shorthand_comComponent_formatter» позволяет вам писать такие компоненты:

    {% button href="..." disabled %}
        Click me!
    {% endbutton %}

Впереди еще много чего, так что обязательно попробуйте django-компоненты!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/jurooravec/django-compents-v094-templating-is-now-on-par-with-vue-or-react-4bg7?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3