Я пытаюсь передать абстрактную модель тегу включения, например, через takes_context=True
. Абстрактная модель содержит выбор для модельного поля. Я хочу передать абстрактную модель вместо жесткого выбора вариантов в шаблоне, чтобы остаться DRY. Во время отладки я понял, что шаблон не получает модель, как ожидалось.
# urls.py
...
urlpatterns = [
path('', IndexView.as_view(), name='index'),
]
# views.py
...
class IndexView(TemplateView):
"""Home Page"""
template_name = 'index.html'
def get_context_data(self, **kwargs):
kwargs['model'] = MyModel
return super(IndexView, self).get_context_data(**kwargs)
...
# index.html
{{model}}
Выше ничего не отображается в браузере. Когда я изменяю переменную на строку, контекст отображается так, как и ожидалось.
# views.py
...
class IndexView(BaseSearchBarMixin, TemplateView):
"""Home Page"""
template_name = 'index.html'
def get_context_data(self, **kwargs):
kwargs['model'] = 'testing 123'
return super(IndexView, self).get_context_data(**kwargs)
...
# index.html
{{model}} # fixed typo
# browser
testing 123
У меня такое чувство, что я делаю что-то глупое, но не знаю, что
РЕДАКТИРОВАТЬ: В соответствии с принятым ответом, передача классов в шаблоны не представляется возможным. Поскольку класс, который я хотел передать, является абстрактной моделью, есть случаи, когда MyModel.objects.first()
может вернуть пустой набор запросов. Я закончил тем, что создал пользовательский ContextMixin
, который добавил выбор к моим представлениям, основанным на классе.