【发布时间】:2016-04-03 14:26:26
【问题描述】:
我正在使用模板系统来开发我网站的不同页面。我有一个“base.html”,它是基本模板,在我的所有网站页面中都有静态(没有 {%blocks%})常见功能,作为标题和导航菜单。
我正在对其进行一些更改,例如将标题上的文本引入“登录”和“注销”,以及在菜单元素上创建链接。
当我转到其他模板(扩展了“base.html”)时,它会很好地加载它,但是例如顶部 div 上的那些“登录”新功能以及菜单上的链接都没有显示。如果模板扩展到“base.html”,它们不是很常见吗?我给你看几段代码:
'base.html' 有这个代码:
<body>
<header>
<div class="topbox">
<!-- <img src="static/mysite/g5794.png" alt="Logo" height="180" width="1400"> -->
</div>
<div id="auth">
{% if user.is_authenticated %}
<p>Bienvenido, <b>{{ user.username }} | <a href=" {% url "logout" %}">Logout</a></b></p>
{% else %}
<p>Bienvenido, por favor <a href="{% url "login" %}">loguéate</a></p>
{% endif %}
</div>
<p>MAIN PAGE MAIN TOP PAGE</p>
</header>
<nav>
<div class="menu">
<p><a href="{% url "index_view" %}">HOME</a> | <a href="{% url "list_index" %}">LIST</a> | <a href="">ELSE</a> | <a href="">BLOG</a></p>
</div>
</nav>
{% block content1 %}
我提到的功能不适用于任何其他扩展“base.html”的模板。例如,“login.html”模板目前看起来像这样:
{% extends "base.html" %}
{% load staticfiles %}
{% load static from staticfiles %}
{% load i18n %}
{% block title %}{% trans "LOGIN" %}{% endblock %}
{% include "base.html" %}
{% block content1 %}
{% block style_base %}
<link href="{% static 'css/styles.css' %}" rel="stylesheet">
{% endblock %}
<div style="text-align:center">
<h1>login</h1>
{% if message %}
<b>{{message}}</b>
{% endif %}
<form action="" method="post">{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Submit" />
</form>
{% endblock %}
页面顶部的所有这些模板标签都略微需要从“base.html”继承样式(如果没有那么多代码,找不到扩展这些样式的方法)。它正确加载了顶部的 div,但没有显示我提到的内容(标题中的新登录/注销行和导航菜单中的链接)。 'list_index' 模板也会发生这种情况。
我不知道这里会发生什么。真的有可能只延伸到一些代码或不能延伸到最新的吗?我的 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',
'django.template.context_processors.media'
],
},
},
]
还尝试使用“DIRS”:[]。唯一显示一切正常的页面是索引页面(base.html 页面)。其他模板会发生什么?谢谢。
【问题讨论】:
-
你确定没有两个base.html文件在不同的地方吗?
-
您应该显示呈现 login.html 的视图。
-
是的,谢谢,我有两个不同的 base.html 文件,但略有不同。现在的问题是,一旦更改,'list_index' 的页面不会从 base.html 中获取样式(就像以前那样)。使用代码更新进行编辑。
-
请通过发布您自己的答案而不是编辑您的问题来分享您的解决方案
-
我只有两个 base.html 文件,这就是返回新编辑时出错的原因。
标签: python django templates inheritance