Как использовать один и тот же объект модели в разных шаблонах. Python. Django
Всем доброго дня, столкнулся с проблемой при работе с моделями в Django Python.
У меня имеется такая модель, в которой содержится единственное поле - Name:
models.py
class GroupModel(models.Model):
name = models.CharField(max_length=10, null=True,blank=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Группа'
verbose_name_plural = 'Группы'
Которую я использую для вывода наименований групп, в подменю навпанели:
Вот так это отображение у меня прописано в шаблоне:
{% for group in groups %}
<li><a href="{% url 'groups' %}">{{ group.name }}</a></li>
{% endfor %}
В качестве groups используется переменная из контекстного процессора который подключен в settings.py:
def add_variable_to_context(request):
return {
'groups': GroupModel.objects.order_by('id').all(),
'subjects': SubjectModel.objects.order_by("id").all(),
'teachers': User.objects.filter(groups__name='teachers').order_by("id").all(),
}
И уже в следующем шаблоне пытаюсь вывести выбранную мной группу, но вывод не удается:
<div class="head_load_sheet">
<h1>Часы группы {{group.name}} за месяц</h1>
</div>
Выводится только: "Часы группы за месяц":
Вью первой страницы:
def index(request):
return render(request, 'main/index.html')
Вью второй страницы:
def groups(request):
return render(request, 'main/deportament/groups.html')
mapping в urls:
path('deportament/groups/<int:group>/', groups, name='groups'),
Подскажите пожалуйста, как правильно я могу оформить такую работу с моделью и разными шаблонами?
Ответы (1 шт):
В контекст добавляется список групп с ключом groups, а в шаблоне вы пытаетесь читать значение с ключом group.
Конечно его там нет. В первом шаблоне group появляется благодаря циклу:
{% for group in groups %}
При переходе по ссылке откуда сервер узнает, какую группу пользователь выбрал? Чтоб показать конкретную группу, нужно чтобы в url, который ведет на страницу показа группы, был параметр с идентификатором группы.
Нужно добавить параметр в urlconf в urls.py:
urlpatterns = [
path('departament/groups/<int:groupid>/', views.groups),
]
и потом задавать его в шаблоне в url:
{% for group in groups %}
<li><a href="{% url 'groups' id=group.id%}">{{ group.name }}</a></li>
{% endfor %}
Теперь идентификатор будет доступен в параметрах view:
def groups(request, groupid):
group = Group.objects.get(id=groupid)
...
И придется группу положить в контекст, чтоб она стала доступна в шаблоне.

