Чтобы реализовать шаблонный расширитель только для строки, вам, вероятно, придется реализовать загрузчик шаблонов. На самом деле, гораздо более чистое решение - использовать предложение Threed, приведенное ниже.Передайте родительский элемент Template()
в контексте, а не имя шаблона диска:
>>> from django.template import Context, Template
>>> extend_me = Template("Before A. {% block a %}{% endblock %}. After A")
>>> str_template = "{% extends parent %} {% block a %}This is inside A{% endblock %}"
>>> Template(str_template).render(Context({"parent": extend_me}))
u'Before A. This is inside A. After A'
К сожалению, это не работает на django 1.3, возможно, из-за ошибка # 7377 (Вы не можете использовать теги extends
и block
в шаблонах строк).Хотя он работает нормально в 1.2.Так что, если вы работаете с 1.3, вы можете посмотреть историю этого вопроса и использовать мой хак:)
Тег шаблона extends позволяет вам указать имя переменной(начиная с версии 1.0).
В этом вопросе есть пример его использования: Как использовать переменную расширения шаблона Django?