Подтвердить что ты не робот

Django как частичное рендеринг

Как мне вызвать метод просмотра с уровня шаблона, например, частичный рендеринг в RoR? Проблема прекрасно проиллюстрирована в этом блоге . Я могу использовать include для включения шаблонов в шаблоны, но тогда мне пришлось бы сопоставлять все имена переменных по уровням шаблонов. Я действительно хотел бы включить представления в шаблоны и разделить слои. Блог был написан год назад. Есть ли лучшее решение с тех пор?

Спасибо

4b9b3361

Ответ 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.