Em Django, Problema com `` block`.`super, Como faço para evitar a duplicação de um `block` em vários arquivos de modelo?

votos
1

Para arquivos de modelo 2 criança herdar um bloco, a ` block`.`super `não resolver

Python 2.5.2, Django 1.0, Windows XP SP3

código esqueleto amostra para arquivos envolvidos:

  1. base.html
  2. item_base.html
  3. show_info_for_all_items.html
  4. show_info_for_single_item.html

ARQUIVO : base.html

{% block content %}
{% endblock %}

ARQUIVO : item_base.html

{% extends base.html %}
{% block item_info %}   
    Item : ` item`.`name `<br/>
    Price : ` item`.`price `<br/>   
{% endblock %}

ARQUIVO : show_info_for_all_items.html

{% extends item_base.html %}
{% block content %}
    <h1>info on all items</h1>
    <hr/>
    {% for item in items %}
        {% block item_info %}
            ` block`.`super `
        {% endblock %}
        <hr/>
    {% endfor %}
{% endblock %}

ARQUIVO : show_info_for_single_item.html

{% extends item_base.html %}
{% block content %}
    <h1>info on single item</h1>    
    {% block item_info %}
        ` block`.`super `
    {% endblock %}  
{% endblock %}

show_info_for_all_items.html mostra uma lista de itens junto com a informação de cada item.

show_info_for_single_item.html mostra um único item com informações do item.

show_info_for_all_items.htmle show_info_for_single_item.htmlcompartilhar mesmo código para mostrar informações item, então me mudei-o para item_base.htmldentroblock item_info

mas o ` block`.`super `em show_info_for_all_items.htmle show_info_for_single_item.htmlnão funciona. ` block`.`super `resolve como branco.

Se eu mover o código de volta a partir block item_infode item_base.htmldentro show_info_for_all_items.htmle show_info_for_single_item.html ele funciona, mas então eu tenho que duplicar mesmo block item_infocódigo em 2 arquivos.

Se o problema block.super não pode ser resolvido, o Django oferecer algo como INCLUIR => {% INCLUDE item_base.html %}assim quadras de um arquivo de modelo pode ser incluído (em vez de extends)

Como faço para evitar a duplicação block item_infoem ambos os arquivos html?

Publicado 21/11/2008 em 21:29
fonte usuário
Em outras línguas...                            


2 respostas

votos
4

O Django oferecer algo como include (...)

Sim !, basta dar uma olhada na documentação: incluir

Coloque o bloco de código comum em foo.html , e em seguida, em cada modelo:

{% include 'foo.html' %}
Respondeu 21/11/2008 em 21:40
fonte usuário

votos
2

Além do includetag mencionado por DZPM, você pode querer considerar escrever um tag inclusão costume .

A principal vantagem neste caso é que o modelo de chamada não tem que usar os mesmos nomes de variáveis ​​como o modelo incluído. Você poderia mostrar um item que é acessado de algum lugar que não seja uma variável chamada 'item':

{% show_item user.favorite_item %}
Respondeu 22/11/2008 em 04:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more