Django показывает одно и то же содержимое (модели) в боковой панели каждой страницы (также в разных приложениях)
У меня есть два приложения: blog и mysite.
В папке проекта у меня есть шаблон, который включает в себя шаблон боковой панели. Эта боковая панель отображается на каждой странице проекта (индексные страницы, страницы mysite, страницы блога). Одна часть этой боковой панели должна показывать список последних x записей блога (независимо от страницы, на которой находится пользователь)
blog/models.py
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=264)
text = RichTextField(config_name='detail_text_field', default='')
created_date = models.DateTimeField(default=timezone.now)
blog/views.py
class LatestBlogEntriesListView(ListView):
model = Post
template_name = 'blog/_latest_blog_entries_list.html'
def get_queryset(self):
return Post.objects.all().order_by('created_date')[-3:]
sidebar.html
<div class="row">
{% include 'blog/_latest_blog_entries_list.html' %}
</div>
_latest_blog_entries_list.html
<h4>Latest Blog Entries</h4>
{% for post in objects %}
<a href="{% url 'blog:post_detail' pk=post.pk %}">{{ post.title }}</a>
{% endfor %}
К сожалению, это не работает. Моя боковая панель показывает только h4 "Последние записи блога", но не посты. Как я могу это сделать?
Любая помощь будет высоко оценена!
При использовании ListView объект по умолчанию называется object_list. Попробуйте изменить ваш код на следующий:
{% for post in object_list %}
<a href="{% url 'blog:post_detail' pk=post.pk %}">{{ post.title }}</a>
{% endfor %}
Вы также можете изменить имя этой переменной в представлении, чтобы, когда вы поймаете ее в шаблоне, это было пользовательское имя.
class LatestBlogEntriesListView(ListView):
model = Post
template_name = 'blog/_latest_blog_entries_list.html'
context_object_name = "your_new_object_name"
Я нашел способ использования контекстного процессора, как описано в этом посте: https://dev.to/harveyhalwin/using-context-processor-in-django-to-create-dynamic-footer-45k4
Это позволяет получить доступ к контекстной переменной на всех страницах.