如何在django中设置模板变量< title>?

inb24sb2  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(346)

我是一个非常新的django,试图建立我的第一个个人cms网站。如果这是显而易见的,请道歉。我正在从 PHP ,所以有时有点让人困惑。
我想设置网站“dashboard | mca portal”的标题。sitename来自mysql数据库mysql查询:

select value from options where `param`='sitename'

你知道怎么做吗?
谢谢kiran

mcdcgff0

mcdcgff01#

您可以通过两种方式将标题值传递给html模板:
1) 重写view get\u context方法,在该方法中从数据库中查询值并像我的示例(python 3.6)一样传递:

class MyView(TemplateView):
  template_name = '...'
  ....
  def get_context_data(self,**kwargs):
    data = super().get_context_data(**kwargs)
    title = ...  # query from database here
    data['title'] = title
    return data

2) 1方法的缺点-您应该在每个视图中手动实现查询,或者实现baseview并继承项目中的所有其他视图。您还可以实现上下文处理器,请参见下面的示例:


# file <project_root>/<app_dir>/context_processor.py

def app_context(request):
  # query from database
  title = ...  # query from database here
  return dict(site_title=title)

......................

# file <settings_dir>/settings.py

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': {
        os.path.join(BASE_DIR, 'templates')
    },
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            '<app_package>/context_processor.app_context'
        ],
    },
},

]
该方法的优点是:在上下文处理器django应用程序的所有模板中都可以访问变量site\u title
请参见官方文档在此处编写自己的上下文处理器https://docs.djangoproject.com/en/2.0/ref/templates/api/

相关问题