Что будет подходящим эквивалентом макросов Jinja в шаблонной системе Django? - PullRequest
6 голосов
/ 19 марта 2012

Скажем так, мне нужно многократно рендерить определенное количество HTML на странице, например, для информации профиля пользователя. Макросы Jinja кажутся абсолютно подходящими для такого использования. Однако в Django нет макросов.

Сейчас я использую специальный фильтр для той же цели - это лучший способ для этого или я что-то упустил?

Спасибо.


пс. Я перевожу приложение, которое работало в GAE с webapp2 и Jinja, на Django.

Ответы [ 4 ]

7 голосов
/ 25 марта 2012

После еще одного взлома документации я наконец-то нашел «правильный» способ сделать это: пользовательские теги включения , которые позволяют вам создать тег из шаблона.

2 голосов
/ 19 марта 2012

Существует два других подхода: блоки и , включая .С блоками вы должны были бы включить все это через цепочку наследования.С помощью include вы просто загружаете по мере необходимости, но вы должны убедиться, что вы передаете соответствующие переменные контекста из своего представления.Тем не менее, ваш нынешний подход, вероятно, является наиболее полезным с точки зрения СУХОЙ.

1 голос
/ 19 марта 2012

Django не имеет макросов, поэтому он либо настраивает фильтры, либо разделяет ваш повторяющийся код в своем собственном шаблоне и включает его снова и снова с различными аргументами, передаваемыми через «with», что, вероятно, будет работать медленнее, чем макросы.Но вы на самом деле можете использовать систему шаблонов jinja2 с Django совершенно отлично.

0 голосов
/ 03 октября 2014

Просто для справки, я потратил немало времени на адаптацию уже существующего фрагмента кода для создания макросов в django довольно надежным способом, если вы действительно хотите макросы, пожалуйста, проверьте это .

Как совет, большую часть времени, что вы хотите делать с макросом, вы должны действительно делать с тегом включения, как уже упоминалось;однако иногда вам просто нужен макрос, и для этого вам нужно использовать библиотеку тегов шаблонов, такую ​​как моя (которая является одной из немногих, которые делают это для django).

...