我的模板结构是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代码复制到每个应用程序视图中,并为每个模板重复相同的过程,但我有很多模板目录,我不能为所有这些目录执行此操作
如果所有页面都需要此变量,则可以使用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
使用的变量名。