【问题标题】:Why Django show me the path to the template but do not load the template himselfe into the page?为什么 Django 向我显示模板的路径但不将模板本身加载到页面中?
【发布时间】:2017-07-20 12:51:25
【问题描述】:

在我的 DjangoServer 的静态文件夹中,有一个默认网页的模板。它用一些模板块装饰。

如果我加载这个模板文件,模板的路径会显示在浏览器中,看起来代码没有加载。

如果我将模板存储在 app/template 文件夹中并扩展此文件。它工作得很好。我使用 Django 的教程,但它仍然无法正常工作。

Settings.py
django.contrib.staticfiles 被添加到 INSTALLED_APPS

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

projectRootFolder/static/html/basePage.html

{% load static from staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
    {% block head %}
    <title>{% block title %}My amazing site{% endblock %}</title>
      {% endblock %}
</head>

<body>
    {% block body %}
    <header>
        {% block header %}
            <header> -- HEADER BANNER --</header>
            {% block menu %}<nav></nav>{% endblock %}
        {% endblock %}
    </header>

    <section>
        {% block section %} SECTION {% endblock %}
    </section>

        {% block footer %}
            <footer> -- FOOTER --</footer>
        {% endblock %}
 {%  endblock %}
</body>
<script type="text/javascript" src="{% static 'angularjs/SOME_ANGULAR_FILES_LOADED.js' %}"></script>
</html>

来自应用的app/template/app/index.html

{% load  static from staticfiles %}
{% static "html/basePage.html" %}
{% block menu %}<nav><a href="/heatingControll">App A</a></nav>{% endblock %}
{% block section %} Lorem Ipsum{% endblock %}

app/views.py

from django.template import loader
from django.shortcuts import render
from django.http import HttpResponse

# PAGE CALLS
def index(request):
    template = loader.get_template('mainControll/index.html')
    context = {}
    return HttpResponse(template.render(context, request))

输出

我犯了什么错误?如何正确加载此模板?

【问题讨论】:

  • 展示你的观点。我怀疑你实际上并没有渲染这个模板,而是静态地提供它;如果你正在渲染它,你会得到一个错误,因为extends 必须是模板中的第一行。
  • @DanielRoseman 谢谢你,我已经更新了这部分问题
  • 您仍然没有显示您的视图。从您对Lynoure 回答的评论来看,为什么您的静态目录中有基本模板?模板不是静态文件。
  • @DanielRoseman 现在将app/views.py 的内容添加到问题中。我在那里找到了basePage.html 模板,因为在我看来,它被定义了一次,不应该改变。你有什么意见?
  • 这不是意见的问题。模板必须放在模板目录中,否则它们不起作用。把你的模板放在正确的地方,然后使用extend,一切都会好起来的。

标签: python django templates


【解决方案1】:

警告,此答案假定您提出问题的目标是让事情正常进行,而不是帮助您解决可能的权限问题以便您可以运行进入另一个问题。也就是说,我假设您的最终目标不是非 html 文档中的 html 文档。

你可以做些什么来让你的输出工作:

您似乎想将一个模板包含到另一个模板中,您可以使用 {% extends "basePage.html" %} 来实现。然后,您的模板确实需要位于可以找到模板的位置,而不是可以找到静态页面的位置。

例如如果您的应用程序被称为“myapp”,那么在 myapp/templates/ 下是一个可能的位置,假设 TEMPLATES 设置具有 APPDIRS = True

这意味着将 index.html 更改为

{% extends "basePage.html" %}
{% block menu %}<nav><a href="/heatingControll">App A</a></nav>{% endblock %}
{% block section %} Lorem Ipsum{% endblock %}

请参阅https://tutorial.djangogirls.org/en/template_extending/https://docs.djangoproject.com/en/1.11/topics/templates/#configuration 以配置可以找到您的 basePage.html 的内容

【讨论】:

  • 虽然只有链接的答案是可以的,但请在此处解释主要部分。
  • 谢谢@Praveen 我已尽力相应地改进答案,但我显然没有为这个网站输入足够快的速度,或者我不知道“有用”是什么意思:)
  • @Lynoure basePage.html 位于项目的静态根文件夹中,与{% extends "basePage.html" %} 我不可以加载此文件。如果我使用..\..\static\html\basePage.html 会出错,因为不允许遍历目录。
  • @michael-mammut 我建议将模板放入模板位置。例如进入 ~/myproject/myapp/templates/ 假设您的 TEMPLATES 配置有 'APP_DIRS': True,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 2015-11-13
相关资源
最近更新 更多