0
votes

WABTAIL: Plusieurs éléments réutilisables sur une page

J'ai besoin de créer un élément réutilisable (bouton CTA) que je peux inclure dans de nombreux endroits de la page.

Ces boutons CTA sont utilisés ~ 8 fois tout au long de la conception. Comment puis-je faire cela sans copier-coller? P>

similaire à celui-ci: façons de créer des ensembles réutilisables de champs dans une wagtail ? sauf que je dois être capable d'utiliser le jeu plusieurs fois sur une seule page. P>

C'est ce que j'essaie de faire: p>

class CTAButton(models.Model):
    text = RichTextField(max_length=25, features=["bold"])
    url = models.URLField(null=True, blank=True)
    page = models.ForeignKey(
        'wagtailcore.Page',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name="%(app_label)s_%(class)s_page",
    )

    panels = MultiFieldPanel(
            [
                FieldPanel("text"),
                FieldPanel("url"),
                PageChooserPanel("page"),
            ],
            heading="CTA Button Fields",
            classname="collapsible",
        )

    class Meta:
        abstract = True


class HeroCTA1(CTAButton):
    pass

class HeroCTA2(CTAButton):
    pass


0 commentaires

3 Réponses :


1
votes

Checkout Django Documentation Pour l'héritage du modèle Il existe trois méthodes que vous pouvez obtenir un héritage modèle dans Django WABTAIL est fabriqué à partir de DJANOG afin que vous puissiez également utiliser un héritage de modèle abstrait dans celui pour plus d'informations à la caisse de la documentation. https://docs.djangoproject.com/fr/3.0 / Thèmes / DB / Modèles / # Modèle-héritage


1 commentaires

J'ai utilisé votre lien de documentation pour essayer de faire un héritage approprié. Ma classe abstraite semble fonctionner, mais j'ai toujours des problèmes.



1
votes

Si votre page de page a 8 places où un bouton CTA peut aller, il est peut-être plus utile de le traiter comme une séquence flexible d'éléments dans laquelle les boutons CTA peuvent être librement mélangés avec d'autres types de contenu choisi par l'auteur de la page, plutôt qu'une mise en page fixe avec des éléments spécifiques à des points spécifiques. Wagtail's Streamfield Fournit ce type de mise en page flexible: HTTPS: //docs.wagtail.io/fr/stable/topics/streamfield.html


1 commentaires

Dans de nombreux cas, votre réponse serait correcte. Mais je ne veux pas vraiment que l'auteur de la page utilise ceci. Je voudrais réutiliser ces éléments dans les blocs et les pages elles-mêmes, puis les auteurs peuvent utiliser ces blocs et pages dans des champs de vente.



0
votes

J'ai suivi la suggestion de @gasman et j'ai cassé le gabarit dans des blocs et a utilisé un mixin pour le garder sec.

Cette solution extrait la fonction HREF et lui permet d'utiliser plusieurs blocs CTA, mais il code fort convention de dénomination. Les futurs lecteurs peuvent probablement trouver un moyen plus intelligent de le faire. Pour utiliser plusieurs éléments, tels que Twoctamixin, je viens d'étendre la mixine de base et ajoutez CTA1_Text, etc.

CTAStructValue est nécessaire pour accéder à la valeur que vous attendez avec une variable @property. Plus d'infos ici . xxx

quelque_section_block.html xxx


0 commentaires