"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > django-components v Templating ahora está a la par con Vue o React

django-components v Templating ahora está a la par con Vue o React

Publicado el 2024-11-08
Navegar:147

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

Oye, soy Juro, soy uno de los mantenedores de django-components. En las versiones v0.90-0.94 hemos agregado características que hacen que el uso de componentes en plantillas sea mucho más flexible, similar a JSX/Vue.

(Esta información ya está un poco anticuada (publicada hace un mes; la última es v0.101), ya que estoy ocupado agregando soporte para variables JS/CSS, TypeScript y Sass, y fragmentos HTML. ¡Cosas interesantes! Pero ¡No he compartido esta actualización todavía!)

De todos modos, el siguiente es un componente blog_post, que acepta un título, una identificación y kwargs adicionales aplicados desde blog_post_props:

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

Lo anterior es una combinación de múltiples características:

1. Etiquetas de cierre automático:

En lugar de

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

Ahora puedes simplemente escribir

    {% component "my_component" / %}

2. Etiquetas de varias líneas:

django_components ahora configura automáticamente Django para permitir etiquetas de varias líneas. Entonces, en lugar de meter todo en una sola línea:

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

Puedes distribuirlo en varias líneas:

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

3. Operador de propagación:

De manera similar al operador ...props en JSX o v-bind en Vue, esto inserta props/kwargs en una posición determinada.

Entonces en lugar de

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

Puedes tener los kwargs en un diccionario y luego aplicarlos:

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

4. Etiquetas de plantilla dentro de cadenas literales en entradas de componentes:

Ahora puedes usar etiquetas de plantilla y filtros dentro de las entradas de los componentes:

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

De esta manera no tendrás que definir variables adicionales cada vez que necesites formatear un valor.

Tenga en cuenta que cuando solo hay una etiqueta y no hay texto adicional a su alrededor, el resultado se pasa como un valor. Entonces "{% random_int 10 20 %}" pasa un número y "{{ editable|not }}" pasa un booleano.

Incluso puedes ir un paso más allá y tener una experiencia similar a Vue o React, donde puedes evaluar expresiones de código arbitrario, también conocido como similar a este:

    

Esto puede ser posible con django-expr, que agrega una etiqueta expr y un filtro que puedes usar para evaluar expresiones de Python desde la plantilla:

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

5. Soporte para {% comp_name %} {% endcomp_name %} y TagFormatter

De forma predeterminada, los componentes se escriben utilizando la etiqueta del componente, seguida del nombre del componente:

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

Ahora puedes cambiar esto (¡e incluso crear el tuyo propio!).

Por ejemplo, configurar COMPONENTS.tag_formatter en "django_components.shorthand_component_formatter" le permite escribir componentes como este:

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

¡Hay mucho más por venir, así que asegúrate de probar django-components!

Declaración de liberación Este artículo se reimpresa en: https://dev.to/jurooravec/django-components-v094-templating-is-now-on-par-with-vue-or-react-4bg7?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarlo.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3