Почему все теги не отображаются на странице 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}}
во всех шаблонах.