Как я могу получить шаблон Django для визуализации внутри шаблона Mako? - PullRequest
2 голосов
/ 17 марта 2011

Мы недавно приняли решение использовать шаблоны Mako в нашем проекте Django.Мы также поддерживаем шаблоны Django, поскольку многие приложения многократного использования (очевидно) предполагают, что шаблоны Django доступны.Я нашел возможность визуализировать шаблоны Django от Mako, но я не смог найти способ заставить его работать наоборот.

Я только что добавил статьи django в наш списокприложений, и он использует Django Templating.Предполагается, что файл base.html является переопределенным шаблоном Django.К сожалению, наш основной сайт построен с использованием Mako.Я пока не могу найти чистый способ для шаблонов Django самим host внутри Мако.

То, что я думаю, я хочу, это тег шаблона, который будет вызывать Мако и запрашивать «встроенный».

Все наши шаблоны Mako в настоящее время выполняют следующее:

<%inherit file="mako/base.html"/>

Я хочу иметь возможность сделать что-то подобное из шаблона Django:

{% render_in_mako 'mako/base.html' 'body' %}

Со следующим в `mako / base.html ':

</head>
  <body>
    <%include file="header.html" />

    ${next.body()}

  </body>
</html>

Кто-нибудь должен был делать это раньше?Я не очень знаком с написанием тегов шаблонов.Как вы думаете, это можно сделать?Альтернативой, вероятно, будет переписывание всех шаблонов в Mako, и это мне совсем не нравится.Я думаю, шаблонный тег был бы невероятно полезен для многих проектов, в которых используется Мако.

1 Ответ

0 голосов
/ 10 апреля 2011

Хороший вопрос! Рендеринг шаблона Mako в шаблоне Django может быть выполнен благодаря пользовательским тегам шаблонов Django. Документы Django объясняют процесс более подробно, но в основном вам придется проанализировать входные данные тега, убедиться в правильности аргументов и создать из этого объект django.template.Node. Node - это объект, который принимает аргументы тега шаблона и определяет метод render() для их обработки. Однако вам придется проявить особую осторожность, чтобы избежать текста, возвращаемого тегом шаблона, поскольку вы определенно не хотите, чтобы теги HTML были экранированы. Видимо, люди из Django тоже об этом позаботились, и в том же документе есть раздел под названием «Особенности автоматического выхода» , в котором объясняется, как это сделать.

Как только вы поймете, как анализировать входные данные из тега шаблона (который на самом деле просто проверяет аргументы), вы можете определить метод Node.render() для вызова функции рендеринга Мако с шаблоном и контекстом, указанными в теге, и вернуть вывод в шаблон Django. Я был немного озадачен вашим описанием, когда вы использовали «тело» в качестве второго аргумента. Что это значит по отношению к шаблону Мако? Я должен признать, что никогда не использовал Mako, но быстрый взгляд на документацию показывает много общего с системами Django и Jinja2; Я прошу прощения, если это предположение ошибочно. Если вы можете сделать это через тег документа Django, это кажется разумным. Желаем удачи!

...