Django - 设置和使用站点范围的变量以在模板中使用

Gui*_*ded 1 django django-templates django-apps

我正在寻找一种方法来设置许多站点范围(或应用程序范围)变量,例如网站(或应用程序)标题,我将在我的模板中使用(例如在我的标题中)。我想到了 WordPress 的bloginfo() 之类的东西。

理想情况下,我希望能够在站点或应用程序级别定义任何类型的属性。例如,对于给定的应用程序,我有:

应用程序

--attribute1(例如标题)

--attribute2(例如联系电子邮件)

--型号1

----属性X

----属性Y

----……

这意味着“attribute1”对我的应用程序来说是独一无二的。然后我需要一种方法来在我的模板中使用 attribute1 的值。我希望我的问题很清楚。

nik*_*k_m 5

我一直使用站点范围(或应用程序范围)变量使用context processors.

在您的应用程序内部创建一个名为的单独文件context_processors.py(不用说,这样命名不是强制性的,它只是为了约定)并且该文件必须至少定义一个接受request参数并返回字典的函数。

类似的东西:

# yourapp/context_processors.py
# you can either use <from django.conf import settings> to make use of setting varibales

def static_vars(request):
    return {
        'var1': 'Hello',
        'var2': 'World',
    }
Run Code Online (Sandbox Code Playgroud)

现在,在您访问模板中的变量之前{{ var1 }},您必须将此函数传递给如下TEMPLATES设置:

# settings.py

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [
        # dirs here
    ],
    'OPTIONS': {
        'context_processors': [
            # some other context processors here and ...
            'yourapp.context_processors.static_vars',
        ],
        'loaders': [
            # loaders here
        ],
    },
},
Run Code Online (Sandbox Code Playgroud)

]

现在,您可以使用static_vars每个模板中公开的变量。

  • 哦!我误解了你之前的评论。所以,您想从管理员内部设置站点范围的变量,对吗?为了做到这一点,“上下文处理器”对您没有帮助。您必须创建一个数据库并将首选变量存储在那里。还有一个名为 [`django-dbsettings`](https://github.com/zlorf/django-dbsettings/) 的包可以帮助你做到这一点。 (2认同)