Если вы сохраняете все это чисто Джанго, тогда ваш подход на самом деле хорош.За исключением того, что функция post_list
не должна быть определена в views.py, поскольку она действительно не является функцией представления.
Лучше было бы создать Post
пользовательский менеджер моделей с пользовательскимметод published()
, чтобы в вашей home_page
функции просмотра вы могли просто выполнить:
posts = Post.objects.published()
Методы published()
«знают», как фильтровать правильные сообщения и упорядочивать их соответствующим образом.В будущем он может даже возвращать разные списки в зависимости от того, имеет ли пользователь определенные привилегии, например, возвращать также сообщения, которые будут опубликованы в будущем для сотрудников.
Эта логика принадлежит модели (или менеджеру модели в данном случае), а не представлению.
Другой подход, особенно когда вы начинаете работать с более сложными представлениями, которые требуют фрагментов информации извсе виды различных мест, это создание представления API для списка сообщений, которые выбираются через JavaScript с помощью вызова ajax.Тогда вашей функции home_page()
нужно только вернуть визуализированный HTML-шаблон с формой, и javascript будет извлекать список сообщений отдельно.Сложнее, потому что вы должны заполнить шаблон с помощью JavaScript.Вот для этого и нужны такие фреймворки, как React или Angular.