web-dev-qa-db-fra.com

Passage des paramètres à l'inclusion dans les modèles Liquid

Sur mon site Web équipé de Jekyll, j'ai une inclusion qui fonctionne comme une fonction, mais je ne vois pas comment passer correctement les paramètres. Lorsque je passe des paramètres comme {% include function.liquid foo="{{baz.quux}}" %}, il ne fait que passer {{baz.quux}}! Bien sûr, pas ce que je voulais: je veux que la valeur de baz.quux soit transmise. Comment puis-je faire cela?

Merci!

45
Nick

Il y a deux façons d'y parvenir. J'ai testé les deux approches par rapport à la version github-pages de Jekyll.

Utiliser Capture

En supposant que vous référencez {{ foo }} dans le code de votre inclusion, vous devez attribuer une valeur à foo avant d'appeler l'inclusion. 

Tel que:

{% capture foo %}{{ baz.quux }}{% endcapture %}
{% include function.liquid %}

Utiliser des paramètres pour inclure

Cela vous permet de contrôler la portée de la variable, qui ressemble à ce que vous voulez. Il y a quelques détails sur la manière de le configurer dans la documentation des modèles .

Vous aviez presque raison avec la syntaxe, dans le modèle que vous utiliseriez:

{% include function.liquid foo=baz.quux %}

La partie qui manquait est que la variable doit être référencée différemment dans le code du fichier d'inclusion, vous devez utiliser {{ include.foo }}

71
David Hutchison

Entrez la variable sans guillemets ni parenthèses, comme ceci:

{% include footer.html param="value" variable-param=page.variable %}

Dans ton cas:

{% include function.liquid foo=baz.quux %}

Cela fonctionne sur mon site.

De: https://github.com/jekyll/jekyll/issues/3577#issue-61988857

1
Oskar Świerad

Aux côtés de David Hutchison, il existe une troisième solution:

Utiliser assign

{% assign foo = baz.quux %}
{% include function.liquid %}

Vous pouvez maintenant référencer {{ foo }} dans votre fichier inclus.

0
luvejo