我是Django的新手,正在尝试建立我的第一个个人CMS网站。如果显而易见,请道歉。我正在从PHP
过渡,所以有时会有点混乱。
我想设置网站的标题"Dashboard | MCA Portal"。网站名称来自MySQL数据库MySQL查询:
select value from options where `param`='sitename'
知道怎么做吗?
谢谢Kiran
您可以通过两种方式将标题值传递给HTML模板:
1( 覆盖View get_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'
],
},
},
]
该方法的优点-变量site_title在上下文处理器django应用程序的所有模板中都可以访问
请参阅官方文档在此处编写您自己的上下文处理程序https://docs.djangoproject.com/en/2.0/ref/templates/api/