Почему все теги не отображаются на странице home.html?

< <
def home(request, tag_slug=None):
     posts = Post.objects.all()
     # tag post
     tag = None
     if tag_slug:
        tag = get_object_or_404(Tag, slug=tag_slug)
        posts = posts.filter(tags__in=[tag])

     context={
     'posts': posts,     #introduces the content added in Post Class
     'tag':tag,
      }

     return render(request, 'blog/home.html', context)
<
urlpatterns = [
path('', PostListView.as_view(), name='blog-home'), 
path('tag/<slug:tag_slug>/',views.home, name='post_tag'),
]
<
                            <li class="list-group-item list-group-item-light" style="text-align:center">
                            <div class="dropdown">
                                <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                  Tags
                                </button>
                                <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                                    {% for tag in post.tags.all %}
                                    <a class="dropdown-item" href="{% url 'post_tag' tag.slug %}">{{tag.name}}</a>
                                    {% endfor %}
                                </div>
                            </div>
                        </li>
Мой файл base.html выглядит следующим образом:

Это предполагаемое поведение, если вы хотите передавать данные на каждую страницу вашего приложения (выпадающее меню, уведомление и т.д.), вам нужен контекстный процессор : https://docs.djangoproject.com/en/4.1/ref/templates/api/

  • Создайте папку context_processors.py в blog_app (или как называется ваше приложение).

  • Добавьте следующий код в этот новый файл:

     def whatever_processor(request):
      posts = Post.objects.all()            
      return {'posts': posts}
    
  • Добавьте context_processors.py к TEMPLATE_CONTEXT_PROCESSORS в settings.py

     TEMPLATE_CONTEXT_PROCESSORS += ("blog_app.context_processors.whatever_processor", )
    

Теперь вы можете использовать {{posts}} во всех шаблонах.

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