在Django中,我们为页眉和页脚创建了模板,以减少代码重复。但是当页眉和页脚的内容是动态的时,对于每个视图,我们需要查询内容并传递上下文,如下所示:
from django.shortcuts import render
from models import HeaderModel, FooterModel
def home(request):
#views code here:
#get latest news
header_content = HeaderModel.objects.all()
footer_content = FooterModel.objects.all()
#info to pass into the html template
context = {
'header_content': header_content,
'footer_content': footer_content,
}
return render(request,'home.html',context)
def login(request):
#views code here:
#get latest news
header_content = HeaderModel.objects.all()
footer_content = FooterModel.objects.all()
#info to pass into the html template
context = {
'header_content': header_content,
'footer_content': footer_content,
}
return render(request,'login.html',context)
在我的方法中,我发现对于每个页面,我都需要重复地编写页眉和页脚内容的代码,并传递到上下文中。有没有更好的方法来做到这一点,从而没有重复?
3条答案
按热度按时间oxf4rvwz1#
我们可以使用上下文处理器来解决这些问题。
上下文处理器对于在模板中构建动态模型数据非常有用。
我们通过写函数来创建它们。我们可以在一个名为context_processors. py的文件中写尽可能多的函数。这个文件可以在一个名为context_processors的文件夹中。这个文件夹可以在general project文件夹中。文件和文件夹的名称可以是任何你想要的。把“init.py”文件放在这个文件夹中,为了知道这是一个Django包。作为一个例子,我将在两个页脚类型中返回当前年份(这不是一个数据模型)和一些帖子(这是一个数据模型)作为上下文:
然后,在www.example.com文件的TEMPLATE变量中注册此上下文处理器settings.py:
在context_processors.py文件中写入函数:
最后,将其放入您喜欢的HTML页脚模板中:
页脚1(_页脚. html):
在另一个HTML页脚文件中:
页脚2(_页脚_底部. html):
不要在页脚中使用来获取当前年份:
我们可以使用上下文处理器,直接将上下文放入模板中:
zf9nrax12#
您可以使用Django中的自定义模板标签并将数据发送到页眉和页脚https://docs.djangoproject.com/en/4.0/howto/custom-template-tags/
同样,你可以使用上下文处理器,但是上下文处理器发送数据到所有的模板文件,对于大数据来说,这不是一个好方法。
iqxoj9l93#
首先为页脚和页眉编写一个不同的模板文件,如footer.html和header.html,然后可以在要继承页脚和页眉的文件中使用{% include 'template_name' %}。