我想在Twig做类似的事情:
{% inlinetemplate input_wrapper %}{% endinlinetemplate %} {% extendinline input_wrapper %} {% block label %}Age {% endblock label %} {% block name %}age{% endblock name %} {% block controls %} {% endblock controls %} {% endextendline input_wrapper %}{% block controls %}{% endblock controls %}
这可能吗?
基于您对您真正想要的内容的评论,我相信set标签的"块版本" 是您所需要的,即:
{% set variableName %} <p> Content block with <i>line-breaks</i> and {{ whatever }} else you need. </p> {% endset %}
然后,您需要的任何标记块都可以传递给宏(正如其他人建议的那样):
{% macro input_wrapper(label, name, controls) %} <div class="control-group"> <label class="control-label" for="{{ name }}">{{ label }}</label> <div class="controls">{{ controls }}</div> </div> {% endmacro %} {% set label, name = "Age", "age" %} {% set controls %} <select name="age"> <option>...</option> </select> {% endset %} {% import _self as inline %} {{ inline.input_wrapper(label, name, controls) }}
至于原始问题,我做了一些研究,发现你可以使用set和verbatim标签以及template_from_string函数的组合来定义内联模板.
但是,模板的内容取决于您希望如何使用它:
如果您对使用块语法设置变量感到满意,请使用include 标记或函数.
如果您需要使用块,就像在原始示例中一样,您将必须使用embed标记.
{# Defining the template #} {% set input_wrapper_string %} {% verbatim %} <div class="control-group"> <label class="control-label" for="{{ name }}">{{ label }}</label> <div class="controls">{{ controls }}</div> </div> {% endverbatim %} {% endset %} {% set input_wrapper_tpl = template_from_string(input_wrapper_string) %} {# Setting the variables #} {% set label, name = "Age3", "age" %} {% set controls %} <select name="age"> <option>...</option> </select> {% endset %} {# "Rendering" the template #} {% include input_wrapper_tpl %}
{# Defining the template #} {% set input_wrapper_string %} {% verbatim %} <div class="control-group"> <label class="control-label" for="{% block name %}{% endblock %}">{% block label %}{% endblock %}</label> <div class="controls">{% block controls %}{% endblock %}</div> </div> {% endverbatim %} {% endset %} {% set input_wrapper_tpl = template_from_string(input_wrapper_string) %} {# "Rendering" the template and overriding the blocks #} {% embed input_wrapper_tpl %} {% block label %}Age{% endblock %} {% block name %}age{% endblock %} {% block controls %} <select name="age"> <option>...</option> </select> {% endblock %} {% endembed %}