Django 教程第 2 部分模板——base_site.html 更改未反映

Posted

技术标签:

【中文标题】Django 教程第 2 部分模板——base_site.html 更改未反映【英文标题】:Django Tutorial Part 2 Templates -- base_site.html changes not reflected 【发布时间】:2015-10-10 09:35:33 【问题描述】:

我正在尝试关注Django Tutorial, Part 2,并被困在关于模板的最后一部分。我遇到的问题是我正在更改 base_site.html 并且我的站点中没有反映任何更改。我正在使用 Python 3.4

根据教程,我在与 manage.py 相同的目录中使用“模板”文件夹创建了这个文件结构。

教程 教程 民意调查 模板 管理员 base_site.html manage.py

然后,我将 TEMPLATES 'DIRS' 修改为 [os.path.join(BASE_DIR,'templates')]

settings.py:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
...
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls'
)

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)

ROOT_URLCONF = 'Tutorial.urls'
print(os.path.join(BASE_DIR, 'templates'))
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',
],
,
,
]

然后,我将 base_site.html 修改为:

% extends "admin/base.html" %

% block title % title  |  site_title|default:_('My Admin Title') 
% endblock %

% block branding %
<h1 id="site-name"><a href="% url 'admin:index' %"> site_header|default:_('My Admin Header') </a></h1>
% endblock %

% block nav-global %% endblock %

最后,我导航到我的网站:

http://localhost:8000/admin/

但是,我仍然对“站点管理”这个标题感到满意。

我检查了它正在查看的目录(settings.py 中的 print() 行),该目录看起来正确:

/home/<user>/Documents/DjangoProjects/Tutorial/templates

我已经查看了this thread 和其他人,但没有发现任何有用的信息。我相信我已经按照教程进行了发球,你们中的任何人都可以帮助我理解我是如何错误地解释教程的吗?或者这是一个文档错误?

【问题讨论】:

【参考方案1】:

你所做的没有错,问题是模板的default filter 是如何工作的。

如果| 左侧的值未传递给模板,此过滤器将给出| 右侧的值。

由于 django 管理应用程序传入 site_title 的值,因此不会触发默认过滤器。

如果您真的想更改显示的标题,您可以通过自定义 django 管理员set the value of site_title(随着您在教程中的进一步深入,您将了解有关自定义管理员的更多信息,这将使链接更清晰)。

如果你只是想看看你的设置是否正确,你可以把模板改成如下:

% block title %
Foo:  title  |  site_title|default:_('My Admin Title') 
% endblock %

然后刷新您的管理站点并查看页面标题。

【讨论】:

我遇到了同样的问题,并在这里找到了很多关于它的问题/答案,但这是唯一一个做任何事情的人。我认为问题一定是文件设置(即使我已经检查了很多次),而实际上这是模板的工作方式。似乎教程应该提到这一点,但至少我知道我的设置正在运行。谢谢!

以上是关于Django 教程第 2 部分模板——base_site.html 更改未反映的主要内容,如果未能解决你的问题,请参考以下文章

Django 教程第 3 部分:创建视图和模板时出错

编写你的第一个 Django 应用程序,第4部分

Django 教程第 2 部分 - 注册后应用程序未显示在管理员上

django学习第81天Django模板层2

TemplateSyntaxError,无法解析剩余部分

Django 教程第 3 部分 - 代码说明