Pergunta

Na Jinja2 , eu tenho um modelo de base como esta:

<title>{% block title %}{% endblock %} - example.com</title>
[...]

<h1> 
  {% block title %}{% endblock %} - example.com
</h1>

Jinja2, então, falhar com a seguinte mensagem:

  lines = [self.message, '  ' + location]
: block 'title' defined twice

Deve ser agora evidente, como o que eu estou tentando fazer - ter o mesmo título em dois lugares: o título de tag ea tag H1, mas a parte do título é efectivamente prestado por outros modelos derivados

Como é que uma pessoa normalmente conseguir isso?

Foi útil?

Solução

Como documentado href="http://jinja.pocoo.org/2/documentation/templates#child-template" aqui , definindo um bloco cria uma macro com o nome do bloco no "eu" objeto especial:

<title>{% block title %}{% endblock %} - example.com</title>
[...]

<h1> 
  {{ self.title() }} - example.com
</h1>

Outras dicas

A idéia é criar um bloco dentro de uma macro e, em seguida, chamar macro duas vezes, em vez de ter tag "block" repetido duas vezes.

Em última versão Jinja2 isso funciona:

layout.html

{%- extends "base.html" -%}

{%- macro duplicated() -%}
    {% block overrideninchild %}{% endblock %}
{%- endmacro -%}

{% block base_content %}
    {{ duplicated() }}
    {{ duplicated() }}
{% endblock %}

child_page.html

{%- extends "layout.html" -%}

{% block overrideninchild %}
   Should be visible twice.
{% endblock %}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top