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

时间:2015-07-21 04:34:57

标签: django django-templates django-admin python-3.4

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

根据教程,我在manage.py所在的目录中创建了一个带有“templates”文件夹的文件结构。

  • 教程
    • 教程
    • 轮询
    • 模板
      • 管理员
        • 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 个答案:

答案 0 :(得分:4)

你正在做的事情没有错,问题是模板的default filter如何运作。

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

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

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

如果您只想查看设置是否正确,可以将模板更改为以下内容:

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

然后刷新管理网站并观看页面标题。