Django как частичное рендеринг
Как мне вызвать метод просмотра с уровня шаблона, например, частичный рендеринг в RoR? Проблема прекрасно проиллюстрирована в этом блоге . Я могу использовать include для включения шаблонов в шаблоны, но тогда мне пришлось бы сопоставлять все имена переменных по уровням шаблонов. Я действительно хотел бы включить представления в шаблоны и разделить слои. Блог был написан год назад. Есть ли лучшее решение с тех пор?
Спасибо
Ответы
Ответ 1
Теги шаблона, безусловно, способ сделать это в Django. Если вам нужно передать конкретные вещи в шаблон и просто визуализировать содержимое, вы можете использовать встроенные теги включения, которые принимают переданные им переменные.
Теперь, с тегами включения, вы должны указать путь к шаблону для рендеринга. Django автоматически не найдет /your_app/views/_my_partial.html.erb
, как в Rails.
Ознакомьтесь с документами и посмотрите, будет ли это делать то, что вам нужно. Если нет, вы всегда можете написать свой собственный.
Ответ 2
Я думаю, что вы ищете {% include '_partial.html' %}
.
Ответ 3
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#include
Если вы используете аргумент "с" при включении частичного, вам не нужно сопоставлять переменные. Вы можете переименовать переменную, прежде чем включать шаблон. Я нашел, что эта техника позволяет мне создавать гораздо более многоразовые шаблоны. Кроме того, это гораздо меньше, чем создание тегов включения. Например:
{% include 'partials/blog_entry.html' with blog_entry=my_blog_entry %}
Ответ 4
Я адаптировал этот фрагмент и сделал его доступным как pypi package.
-
pip install django_render_partial
-
Добавить 'django_render_partial'
в INSTALLED_APPS
-
Убедитесь, что 'django.core.context_processors.request'
находится в TEMPLATE_CONTEXT_PROCESSORS
-
Используйте тег {% render_partial %}
в своем шаблоне:
{% load render_partial %}
{# using view name from urls.py #}
{% render_partial 'partial_view' arg1=40 arg2=some_var %}
{# using fully qualified view name #}
{% render_partial 'partial_test.views.partial_view' arg1=40 arg2=some_var %}
{# class based view #}
{% render_partial 'partial_test.views.PartialView' arg1=40 arg2=some_var %}
A тестовый проект, содержащий эти примеры, доступен на GitHub.