"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > django-components v Templating agora está no mesmo nível do Vue ou React

django-components v Templating agora está no mesmo nível do Vue ou React

Publicado em 2024-11-08
Navegar:982

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

Ei, sou Juro, sou um dos mantenedores dos componentes do Django. Nas versões v0.90-0.94 adicionamos recursos que tornam o uso de componentes em templates muito mais flexível, semelhante ao JSX/Vue.

(Esta informação já está um pouco desatualizada (lançada há um mês; a mais recente é v0.101), pois estou ocupado adicionando suporte para variáveis ​​JS/CSS, TypeScript & Sass e fragmento HTML. Coisas interessantes! Mas eu percebi que ainda não compartilhei esta atualização!)

De qualquer forma, o seguinte é um componente blog_post, que aceita um título, id e kwargs adicionais aplicados a partir de blog_post_props:

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

O acima é uma combinação de vários recursos:

1. Tags de fechamento automático:

Em vez de

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

Agora você pode simplesmente escrever

    {% component "my_component" / %}

2. Tags multilinhas:

django_components agora configura automaticamente o Django para permitir tags multilinhas. Então, em vez de amontoar tudo em uma única linha:

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

Você pode espalhar em várias linhas:

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

3. Operador de propagação:

Da mesma forma que o operador ...props em JSX ou v-bind em Vue, isso insere props/kwargs em uma determinada posição.

Então, em vez de

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

Você pode ter os kwargs em um dicionário e depois aplicá-los:

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

4. Tags de modelo dentro de literais de string em entradas de componentes:

Agora você pode usar tags de modelo e filtros dentro de entradas de componentes:

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

Dessa forma, você não precisa definir variáveis ​​extras toda vez que precisar formatar um valor.

Observe que quando há apenas uma tag e nenhum texto extra ao redor dela, o resultado é passado como um valor. Portanto, "{% random_int 10 20 %}" passa um número e "{{ editable|not }}" passa um booleano.

Você pode até dar um passo além e ter uma experiência semelhante ao Vue ou React, onde você pode avaliar expressões de código arbitrárias, também conhecidas como semelhantes a esta:

    

Isso pode ser possível com django-expr, que adiciona uma tag expr e um filtro que você pode usar para avaliar expressões Python de dentro do modelo:

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

5. Suporte para {% comp_name %} {% endcomp_name %} e TagFormatter

Por padrão, os componentes são escritos usando a tag do componente, seguida do nome do componente:

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

Agora você pode alterar isso (e até mesmo criar o seu próprio!).

Por exemplo, definir COMPONENTS.tag_formatter como "django_components.shorthand_component_formatter" permite que você escreva componentes assim:

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

Muito mais está por vir, então não deixe de experimentar o django-components!

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/jurooravec/django-components-v094-templating-is-now-on-par-with-vue-or-react-4bg7?1 Se houver alguma violação, por favor entre em contato com study_golang@163 .comdelete
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3