Модели не отображаются в шаблонах Django - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь передать абстрактную модель тегу включения, например, через 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, который добавил выбор к моим представлениям, основанным на классе.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вы передаете класс, а не экземпляр класса или набора запросов, попробуйте:

kwargs['model'] = MyModel.objects.first()

(например, чтобы получить первый).

Вы можете ' t использовать класс в шаблоне.

0 голосов
/ 03 марта 2020

В kwargs вы передаете ключевое слово «модель», но в шаблоне вы используете ключевое слово «Mymodel», поэтому отображается пустой шаблон.

2-я вещь отображает поля модели, такие как имя модели.field_

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...