【问题标题】:include template tag not working in django包含模板标签在 django 中不起作用
【发布时间】:2013-04-02 18:17:30
【问题描述】:

我的 Views.py 文件如下所示

  def homepage(request):
      template = 'homepage.html'
      list_display_template = 'list.html'
      list = model.objects.all()

      return render_to_response(template,
           {'list_display_template': list_display_template,
            'list' : list,},
            context_instance=RequestContext(request))

我的 homepage.html 如下所示:-

  {% extends "base.html" %}

  {% block main_content %}
      {% include list_display_template %}
  {% endblock %}

我的 list_display_template (list.html) 有以下信息

  < div class= "span10">
     {% for item in list %}
         <p> {{ item }}</p>
      {% endfor %}
  </div>

以上在开发中工作正常,但在生产中包含标签不起作用,当我检查元素时,它没有显示 list.html 中的任何项目。有人可以帮忙吗?

编辑:- 我的文件夹结构如下

project_name/
    project_name/
         settings.py
    static/
       css/
       images/
    templates/
      homepage.html
      list.html
      base.html

谢谢

【问题讨论】:

  • 如果您在 homepage.html 中使用 {% include 'list.html' %},它应该可以工作。
  • {% include "list.html" %} 工作吗?
  • 不。以上都不起作用。我尝试给出完整的路径名'templates/list.html'......即使这样也不起作用
  • 这就是问题所在 - 模板未指向有效位置。您的“list.html”文件的位置是什么?
  • 我遇到了类似的问题。原来我的 homepage.html 不是我所期望的。它实际上是在不同的位置加载了一个完全不同的文件,该文件不包含任何内容,因此我没有看到任何更改,并且错误地将其解释为包含不工作。删除您的项目可能解决了模板目录位置问题或删除了可能导致类似问题的重复 homepage.html。

标签: django


【解决方案1】:

我有同样的问题,但我会以其他有类似问题的用户可以理解的方式回答这个问题。

您可能在包含的 html 文件中有某种模板块, 这个块要么期待某种包含,要么导致错误调用 django 传递的异常,因此您看不到错误, 如果您在父模板中使用{% load someLoad %},那么也在包含的 html 中使用它, 我想这会随着版本的变化而变化。

在我的(非常具体的)案例中,我在包含的 html 文件中缺少这个:

{% load i18n %} 
{% load cms_tags sekizai_tags %}

【讨论】:

  • 就是这样,包含的模板中缺少加载 i18n...Ockham 永远不会失败。
  • 我刚刚遇到了类似的问题,几乎因此而发疯。更复杂的是它只发生在生产服务器上而不是我的机器上。后来,我发现我在其上使用“包含”的那个导航栏有一些我没有处理的网址,因此导致了很多错误,但它们被包含语句静音了。谢谢^_^
【解决方案2】:

include 语句会失败而不引发错误的另一种情况是,如果您正在使用扩展另一个模板的模板,并且您的 include 位于命名的 阻止:

{% extends "my_base.html" %}

{% block content %}
    {{ block.super }}
    {% include "partials/file1.html" %}
{% endblock %}

{% include "partials/file2.html" %}

在这种情况下,file2.html 将不会被包含,因为它不在一个块中,并且您不会收到任何警告消息,并且会在您意识到自己所做的事情之前尝试各种事情:-)

【讨论】:

  • 这确实是一个糟糕的情况。它当然适用于您放在 {% block %} 区域之外的各种标签。他们可能不会评估。
  • 这个答案在 2021 年帮助了我很多。这个(“this”=“包括需要在 {%block %} 声明中的流程数据”)可能应该在文档中更清楚。
  • @DavidRhoden 很高兴这对您有所帮助。我想知道这是否是模板解析器实际上可以检测到并发出警告的东西。
【解决方案3】:

我刚刚遇到了类似的问题。我能够通过临时复制并粘贴我想直接包含在父页面(base.html)中的html(即navigation.html)来诊断它。似乎如果包含的 html 中有错误,它就不会被读入,也不会出现错误。

将 navigation.html 中的代码粘贴到 base.html 后,我收到 500 错误,因为 navigation.html 中的一个命名 url 没有反向。

【讨论】:

  • 非常有价值的建议。 TLDR:将包含的部分移动到主模板并查找错误。
【解决方案4】:

如果包含模板有任何问题/错误,django 默认不会显示错误。您可以使用设置变量TEMPLATE_DEBUG = True 启用它,然后当您尝试加载该页面时,您将能够在模板中查看错误。

在上述情况下,包含的模板中可能缺少一些加载标签{% load xxx %}

【讨论】:

  • 在 Django 1.8 及更高版本中,您应该将 TEMPLATES[0]["OPTIONS"]["debug"] 设置为 True
【解决方案5】:

如果您不想混淆template tagsloadinclude 选项,还有另一种方法:

使用您的参数显式渲染模板,将其存储为字符串,然后作为上下文渲染到主模板中。

from django.template.loader import render_to_string
    def get_context_data(self, **kwargs):
        ctx['loader'] = render_to_string('common/loader.html', {'loader': randint(0, 15)})
        return ctx

【讨论】:

    【解决方案6】:

    我有同样的问题,我尝试了所有的方法。但仍然没有包含“html”。然后,我尝试将“html”从应用程序/模板移动到项目/模板。它的工作。所以我将html文件移回,并在setting.py中添加关于模板路径的路径。解决了。即使您没有在 setting.py 中添加模板路径,pycharm 仍然可以将“包含文件”链接到确切位置。并毫无错误地运行 django 项目....花了我 3 天...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2016-03-22
      • 1970-01-01
      • 2021-03-07
      相关资源
      最近更新 更多