Django和扩展模板不起作用?

时间:2017-01-25 04:45:06

标签: python html django templates

我正在使用Django构建我的博客网站,我无法在我的项目中扩展模板。

我有两个模板:

  1. base.html文件
  2. post.html
  3. Base.html是我的父模板,post.html是我的扩展base.html的子模板。

    我无法让Django扩展post.html。当我运行web服务器base.html显示但没有来自post.html的文本。

    我已经阅读了关于模板的Django文档以及如何扩展,我相信我必须语法正确,但我不确定为什么它不起作用?

    我也在使用Boostrap这个项目。

    感谢您的帮助, Nermin

    post.html

      {% extends "post/base.html" %}
    
    {% block content %}
        <div class="blog-post">
                <h2 class="blog-post-title">Sample blog post</h2>
                <p class="blog-post-meta">January 1, 2014 by <a href="#">Mark</a></p>
    
                <p>Blog text goes here.</p>
    
    
        </div><!-- /.blog-post -->
    {% endblock  %}
    

    在这里输入代码

    base.html文件

      <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">
    
        <!-- load static files -->
        {% load staticfiles %}
    
        <title>Blog Title</title>
    
        <!-- Bootstrap core CSS -->
        <link href="{% static 'css/bootstrap.min.css'  %}" rel="stylesheet">
    
        <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
        <link href="../../assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
    
        <!-- Custom styles for this template -->
        <link href="{% static 'css/blog.css'  %}" rel="stylesheet">
    
        <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
        <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
        <script src="../../assets/js/ie-emulation-modes-warning.js"></script>
    
        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
        <![endif]-->
      </head>
    
      <body>
    
        <div class="blog-masthead">
          <div class="container">
            <nav class="blog-nav">
              <a class="blog-nav-item active" href="#">Home</a>
              <a class="blog-nav-item" href="#">About</a>
            </nav>
          </div>
        </div>
    
        <!-- blog post goes here -->
    
        {% block content %}
        {% endblock %}
    
    
        <div class="container">
    
          <div class="blog-header">
            <h1 class="blog-title">Code'N Cofee Blog</h1>
            <p class="lead blog-description">Live and write code. </p>
          </div>
    
          <div class="row">
    
            <div class="col-sm-8 blog-main">
    
    
              <nav>
                <ul class="pager">
                  <li><a href="#">Previous</a></li>
                  <li><a href="#">Next</a></li>
                </ul>
              </nav>
    
            </div><!-- /.blog-main -->
    
            <div class="col-sm-3 col-sm-offset-1 blog-sidebar">
              <div class="sidebar-module sidebar-module-inset">
                <h4>About</h4>
                <p>Etiam porta <em>sem malesuada magna</em> mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.</p>
              </div>
              <div class="sidebar-module">
                <h4>Archives</h4>
                <ol class="list-unstyled">
                  <li><a href="#">March 2014</a></li>
                  <li><a href="#">February 2014</a></li>
                  <li><a href="#">January 2014</a></li>
                  <li><a href="#">December 2013</a></li>
                  <li><a href="#">November 2013</a></li>
                  <li><a href="#">October 2013</a></li>
                  <li><a href="#">September 2013</a></li>
                  <li><a href="#">August 2013</a></li>
                  <li><a href="#">July 2013</a></li>
                  <li><a href="#">June 2013</a></li>
                  <li><a href="#">May 2013</a></li>
                  <li><a href="#">April 2013</a></li>
                </ol>
              </div>
              <div class="sidebar-module">
                <h4>Elsewhere</h4>
                <ol class="list-unstyled">
                  <li><a href="#">GitHub</a></li>
                  <li><a href="#">Twitter</a></li>
                  <li><a href="#">Facebook</a></li>
                </ol>
              </div>
            </div><!-- /.blog-sidebar -->
    
          </div><!-- /.row -->
    
        </div><!-- /.container -->
    
        <footer class="blog-footer">
          <p>Blog template built for <a href="http://getbootstrap.com">Bootstrap</a> by <a href="https://twitter.com/mdo">@mdo</a>.</p>
          <p>
            <a href="#">Back to top</a>
          </p>
        </footer>
    
    
        <!-- Bootstrap core JavaScript
        ================================================== -->
        <!-- Placed at the end of the document so the pages load faster -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
        <script src="../../dist/js/bootstrap.min.js"></script>
        <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
        <script src="../../assets/js/ie10-viewport-bug-workaround.js"></script>
      </body>
    </html>
    

3 个答案:

答案 0 :(得分:0)

我找到了解决方案。问题不在于两个html文件,而是在我的views.py文件中。基本上我在views.py中的索引函数渲染了base.html,因此在post.html的屏幕上没有显示任何内容

鉴于post.html正在扩展base.html,我需要编辑我的索引函数以返回并像postlow一样渲染post.html并修复代码。

希望这可以帮助其他有类似问题的人。

这是我的索引函数现在在views.py

中的显示方式
    from django.shortcuts import render
from django.http import HttpResponse


def index(request):
    return render(request, 'post/post.html', {'': ''})

答案 1 :(得分:0)

Nermic Kekic的答案对我不起作用。

我不是专家,但以下是对我有用的。

问题是我的base.html(父级)不知道在哪里附加post.html(子级),所以我不得不提

{% block content %}
{% endblock %}

我的base.html正文中的这两行也对我有用,因为此块将告诉post.hml在哪里显示child的内容。

答案 2 :(得分:0)

{% block content %}
{% endblock content %}

您需要在 base.html 文件中添加以上代码行。在您的 (post.html) 文件中,您需要添加这些行以及其中的独特内容。这样 Django 就知道您可以在何处更改 post.html 文件。