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

Это позволяет получить доступ к контекстной переменной на всех страницах.

Вернуться на верх