Hey, ich bin Juro, ich bin einer der Betreuer von Django-Komponenten. In den Versionen v0.90–0.94 haben wir Funktionen hinzugefügt, die die Verwendung von Komponenten in Vorlagen viel flexibler machen, ähnlich wie bei JSX/Vue.
(Diese Informationen sind bereits etwas veraltet (veröffentlicht vor einem Monat; die neueste Version ist Version 0.101), da ich damit beschäftigt bin, Unterstützung für JS/CSS-Variablen, TypeScript & Sass und HTML-Fragmente hinzuzufügen. Spannendes Zeug! Aber ich Mir ist aufgefallen, dass ich dieses Update noch nicht geteilt habe!)
Wie auch immer, das Folgende ist eine Komponente blog_post, die einen Titel, eine ID und zusätzliche Kwargs akzeptiert, die von blog_post_props angewendet werden:
{% blog_post title="{{ person.first_name }} {{ person.last_name }}" id="{% random_int 10 20 %}" ...blog_post_props / %}
Das Obige ist eine Kombination mehrerer Funktionen:
1. Selbstschließende Tags:
Anstatt
{% component "my_component" %} {% endcomponent %}
Sie können jetzt einfach schreiben
{% component "my_component" / %}
2. Mehrzeilige Tags:
django_components konfiguriert Django jetzt automatisch so, dass mehrzeilige Tags zugelassen werden. Anstatt also alles in eine einzige Zeile zu stopfen:
{% component "blog_post" title="abcdef..." author="John Wick" date_published="2024-08-28" %} {% endcomponent %}
Sie können es auf mehrere Zeilen verteilen:
{% component "blog_post" title="abcdef..." author="John Wick" date_published="2024-08-28" / %}
3. Spread-Operator:
Ähnlich wie der ...props-Operator in JSX oder v-bind in Vue fügt dieser props/kwargs an einer bestimmten Position ein.
Also statt
{% component "blog_post" title="abcdef..." author="John Wick" date_published="2024-08-28" / %}
Sie können die Kwargs in einem Wörterbuch haben und dann Folgendes anwenden:
# Python props = { "title": "abcdef...", "author": "John Wick", "date_published": "2024-08-28" }
{# Django #} {% component "blog_post" ...props %}
4. Vorlagen-Tags innerhalb von Zeichenfolgenliteralen in Komponenteneingaben:
Sie können jetzt Vorlagen-Tags und Filter innerhalb von Komponenteneingaben verwenden:
{% component 'blog_post' "As positional arg {# yay #}" title="{{ person.first_name }} {{ person.last_name }}" id="{% random_int 10 20 %}" readonly="{{ editable|not }}" / %}
Auf diese Weise müssen Sie nicht jedes Mal zusätzliche Variablen definieren, wenn Sie einen Wert formatieren müssen.
Beachten Sie, dass das Ergebnis als Wert übergeben wird, wenn nur ein einzelnes Tag und kein zusätzlicher Text vorhanden ist. „{% random_int 10 20 %}“ übergibt also eine Zahl und „{{ editable|not }}“ übergibt einen booleschen Wert.
Sie können sogar noch einen Schritt weiter gehen und eine ähnliche Erfahrung wie Vue oder React machen, wo Sie beliebige Codeausdrücke auswerten können, also ähnlich wie hier:
Dies kann mit django-expr möglich sein, das ein expr-Tag und einen Filter hinzufügt, mit denen Sie Python-Ausdrücke innerhalb der Vorlage auswerten können:
{% component "my_form" value="{% expr 'input_value if is_enabled else None' %}" / %}
5. Unterstützung für {% comp_name %} {% endcomp_name %} und TagFormatter
Standardmäßig werden die Komponenten mit dem Komponenten-Tag geschrieben, gefolgt vom Namen der Komponente:
{% component "button" href="..." disabled %} Click me! {% endcomponent %}
Sie können dies jetzt ändern (und sogar Ihr eigenes erstellen!).
Wenn Sie beispielsweise COMPONENTS.tag_formatter auf „django_components.shorthand_component_formatter“ setzen, können Sie Komponenten wie folgt schreiben:
{% button href="..." disabled %} Click me! {% endbutton %}
Es wird noch viel mehr kommen, also probieren Sie Django-Components unbedingt aus!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3