Система шаблонов Django: Как многократно вызывать родительский блок и частично заполнять его содержимое? - PullRequest
0 голосов
/ 18 марта 2012

Мне нужно использовать постоянный фрагмент в моем меню, который центрирует содержимое дочернего элемента:

<table height='100%' cellpadding='0px' cellspacing='0px'>
    <tr>
            <td valign='middle'>                
                {# place here child content #}                      
            </td>
        </tr>
</table>

Проблема заключается в следующем: я хочу иметь только HTML-фрагмент ... высота таблицы= '... в родительском шаблоне в соответствии с принципом DRY.Есть много дочерних элементов, которые помещаются во фрагмент (где комментарий).

Как я могу вызвать блок table в моем дочернем шаблоне много раз и поместить дочерний html гдекомментарии

1 Ответ

0 голосов
/ 18 марта 2012

Самый простой способ, который я вижу, это создать простой пользовательский тег centervert .

from django import template

register = template.Library()

@register.tag
def centervert(parser, token):
    nodelist = parser.parse(('endcentervert',))
    parser.delete_first_token()
    return CenterVertNode(nodelist)

class CenterVertNode(template.Node):
    def __init__(self, nodelist):
        self.nodelist = nodelist
    def render(self, context):
        html = self.nodelist.render(context)
        return "<table cellpadding='0px' cellspacing='0px'><tr><td valign='center'>{0}</td></tr></table>".format( html )

А затем в шаблоне используйте его:

{% centervert %}
  {# place here child content #} 
{% endcentervert %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...