我试图从我的django模型数据库动态加载mynavbar内容,而不会影响显示页面

问题描述 投票:0回答:1

我的模板结构是base.html,我在其中包含了navbar.html

我有一个名为tags的应用程序和标签在views.py中有一个models.py和一个views.py,我有一个django代码,因为这个

from tags.models import Tag

class TagList(ListView):
    model = Tag

    def get_queryset(self):
        return Tags.object.all()

当我在我的模板中为tag_list.html调用{{object_list}}时,这是有效的。所以我在我的模板navbar.html中添加了{{object_list}},该模板包含在base.html中,但只有当我在显示我的tag_list.html的网址上时才有效,并且当我在其他网址或其他网址上时没有显示任何内容模板..

如何显示它而不管内部的模板目录或显示的URL ...我希望它显示

我想过将我的views.py代码复制到每个应用程序视图中,并为每个模板重复相同的过程,但我有很多模板目录,我不能为所有这些目录执行此操作

python django
1个回答
0
投票

如果所有页面都需要此变量,则可以使用context processor。否则,类似于ContextMixin的mixin类也可以完成这项工作:

# views.py
class MyContextMixin:
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['tags_list'] = Tags.object.all()
        return context

class TagList(MyContextMixin, ListView):
    model = Tag

然后,您可以按如下方式扩展每个View:

# other views.py
from tags.views import MyContextMixin

class OtherView(MyContextMixin, ...):
    ...

在这两种情况下,您都可以添加另一个context变量。请注意,我将object_list重命名为tags_list,以不覆盖ListView使用的变量名。

© www.soinside.com 2019 - 2024. All rights reserved.