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

Posted

技术标签:

【中文标题】如何将数据库中的变量放入 base.html 模板?【英文标题】:How to put variable from database into base.html template? 【发布时间】:2016-03-18 20:00:22 【问题描述】:

我正在处理一个网页。 footer 将有联系方式,如电子邮件或电话。这个footer 应该无处不在,所以它在每个template/html 扩展的base.html 中。

我创建了一个名为ContactAdmin 的表,为管理员提供简单直接的界面来更改他的联系信息。这就是问题所在。

base.html 没有视图(它只是用于扩展),所以我不知道如何将变量放在那里 - emailtelephone 来自表 ContactAdmin。我想过把它放到每一个视图中,这在我看来是一个巨大的矫枉过正。

那么如何让Django从数据库中读取这些变量并将它们放入base.html

ContactAdmin 表应该只有一行

【问题讨论】:

【参考方案1】:

您不需要编辑所有视图。正是对于这种情况,django 有template context processors。这里的好处是,由于基本模板仍然是模板语言的一部分,并且它可以访问Context,您只需在自定义上下文处理器中设置这些变量,一切都应该按原样工作。

一些关于如何编写自定义上下文处理器的示例:

*** Example Django example

【讨论】:

【参考方案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
    

你的项目/settings.py

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

我猜这些联系人设置不会经常更改。所以你可能对caching的查询结果也感兴趣。

【讨论】:

以上是关于如何将数据库中的变量放入 base.html 模板?的主要内容,如果未能解决你的问题,请参考以下文章

Django:不能将变量传递给包含的模板?

全局视图 (base.html) 中的 Django 动态菜单在所有模板中可见

如何将特定用户下的数据放入 Django 中的模板中

Django:访问子模板中的循环变量

模板继承中的变量从何而来?

如何将 html 代码放入 Django 中的模板中