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 更改未反映的主要内容,如果未能解决你的问题,请参考以下文章