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

时间:2016-03-18 20:00:23

标签: python django django-models

我正在开发一个网页。 footer会有电子邮件或电话联系。这个footer应该在任何地方,因此它位于base.html,每个template/html都会扩展。

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

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

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

ContactAdmin 表应该只有一行

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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',
            ]
        }
    }
]

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