【问题标题】:My templates don't extend properly to 'base.html'我的模板没有正确扩展到“base.html”
【发布时间】: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


【解决方案1】:

在 base.html 中 我只看到 {% block content1 %},没有看到 {% endblock content1 %}}。

【讨论】:

  • 那是因为我没有复制整个代码。这个问题现在已经解决了,但这使得样式不能正确扩展。第一篇文章已编辑,感谢您的回答。
猜你喜欢
  • 2013-08-01
  • 2016-12-17
  • 2020-02-04
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多