【问题标题】:Why does template inheritance in Django not show error?为什么Django中的模板继承不显示错误?
【发布时间】:2019-09-14 14:56:33
【问题描述】:

当模板继承似乎失败时,我没有看到错误。我没有看到子模板中的内容,但没有看到“TemplateNotFound”错误。如果我将父模板的路径更改为“notthefilename.html”,我仍然看不到错误。有没有办法让模板继承大声失败?我不知道为什么这不起作用,即使我在按预期工作的相邻文件夹中有类似的继承。

generic_create.html 文本“hello2”正在呈现。

{% extends "base.html" %}
{% load crispy_forms_tags %}

{% block content %}


<div style= "padding-top: 30px">
    <form method="post">{% csrf_token %}
        {% if model_name == 'TransactionsTable' %}
        <div>
            {% block transactions_create %}
            hello2
            {% endblock transactions_create %}             
        </div>        
        {% else %}
        {{ form |crispy }}
        {% endif %}
        <div id="container">
        <input type="submit"  class="btn btn-default" value="Save"> 
        <a href="{{ view.get_success_url }}" class="btn btn-default">Cancel</a>
        <div>
    </form>
</div>

{% endblock content %}

transactions_create.html - 内容“Hello1”呈现

{% extends "generic_create.html" %}
{% load static %}

{% block transactions_create %}

Hello1

{% endblock transactions_create %}

【问题讨论】:

  • 不清楚什么在这里不起作用。你渲染的是哪个模板?
  • 我的视图正在渲染generic_create.html。哦,我有它倒退吗?我应该渲染 transaction_create.html 吗?
  • 是的。您必须渲染孩子,而不是父母。

标签: django python-3.x django-templates


【解决方案1】:

感谢@Daniel Roseman 的评论,我意识到我正在向后执行继承。我也把事情复杂化了。使用include 标签,我能够执行我希望很容易实现的那种继承。

generic_create.html

{% extends "base.html" %}
{% load crispy_forms_tags %}

{% block content %}


<div style= "padding-top: 30px">
    <form method="post">{% csrf_token %}
        {% if model_name == 'TransactionsTable' %}
        <div>
        {% include "transactions_create.html" %}     #NOTE: Here I removed the block and added 'include'.    
        </div>        
        {% else %}
        {{ form |crispy }}
        {% endif %}
        <div id="container">
        <input type="submit"  class="btn btn-default" value="Save"> 
        <a href="{{ view.get_success_url }}" class="btn btn-default">Cancel</a>
        <div>
    </form>
</div>

{% endblock content %}

transactions_create.html

Hello1 #removed all of the extend and 'block' code. 'include' just renders the html directly.

就是这样! 'include' 真的很简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2010-12-06
    • 2012-08-07
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多