如何将数据库中的变量放入base.html模板?

3
我正在制作一个网页,页脚中将包含联系方式,如电子邮件或电话。这个页脚应该随处可见,因此在每个模板/HTML中都会扩展base.html
我创建了一个名为ContactAdmin的表,为管理员提供简单明了的界面来更改他的联系信息。但是问题出现了。 base.html没有视图(它只用于扩展),因此我不知道如何在其中放置来自ContactAdmin表的变量- emailtelephone。我考虑过将其放入每个视图中,但在我看来,这样做是非常冗长的。
那么,如何使Django从数据库读取这些变量并将它们放入base.html中呢? ContactAdmin表应该只有一行
2个回答

4
你不需要编辑所有视图。针对这种情况,Django提供了模板上下文处理器。这里的优点是,由于基本模板仍然是模板语言的一部分,并且可以访问Context,您只需要在自定义上下文处理器中设置这些变量,一切都应该正常工作。
以下是编写自定义上下文处理器的示例:

2

您可以使用上下文处理器来实现此功能。例如:

yourapp/context_processors.py

def contact(request):
    from yourapp.models import ContactAdmin
    contacts = ContactAdmin.objects.all()

    return {
        'contacts': contact,  # Add 'contacts' to the context
    }

yourproject/settings.py

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'yourapp.context_processors.contact',
            ]
        }
    }
]

我猜这些联系人设置不会经常改变。因此,您可能对缓存查询结果也感兴趣。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接