2017-09-27 24 views
0

我得到了一個錯誤:TemplateSyntaxError在/帳號/資料/

TemplateSyntaxError at /accounts/profile/ 
<ExtendsNode: extends "registration/accounts/base.html"> must be the first tag in the template 

我寫base.html

{% load staticfiles %} 
<html lang="ja"> 
    <head> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" href="{% load staticfiles 'bootflat/css/bootflat.min.css' %}"> 
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> 
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> 
    </head> 
    <body> 
    <nav class="navbar navbar-default" role="navigation"> 
     <div class="navbar-header"> 
      <p class="navbar-text">HELLO</p> 
      {% if user.is_authenticated %} 
      <p class="navbar-text">{{ user.get_username }}</p> 
      {% endif %} 
     </div> 
    </nav> 

    <div class="container"> 
     {% block content %} 
     {% endblock %} 
    </div> 

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 

    <!-- Include all compiled plugins (below), or include individual files as needed --> 
    <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script> 
    </body> 
</html> 

profile.html是:

{% load staticfiles %} 
{% extends "registration/accounts/base.html" %} 
{% block content %} 
    <html lang="ja"> 
    <head> 
     <meta charset="utf-8"> 
     <link rel="stylesheet" href="{% static 'bootflat/css/bootflat.min.css' %}"> 
     <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> 
     <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> 
    </head> 
    <body> 

  <a href="{% url 'kenshinresults'%}">SEE YOUR PHOTO</a> 

    <div class="container"> 
     <form action="{% url 'accounts:upload_save' %}" method="POST" enctype="multipart/form-data"> 
     {% csrf_token %} 
     <p>SEND PHOTO</p> 
     <input type="file" name="files[]" multiple> 
     <input type="hidden" value="{{ p_id }}" name="p_id"> 
     <input type="submit" value="Upload"> 
     </form> 
    </div> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
    </body> 
    </html> 

{% endblock %} 

我發現只有base.html被準確地顯示,但是當我試圖base.html繼承profile.html,發生此錯誤。之前,這兩個文件加載準確,但是當我添加href="{% static 'bootflat/css/bootflat.min.css' %}"profile.html時,這個錯誤很重要。爲什麼會發生這樣的錯誤?我怎樣才能解決這個問題?我認爲加入{%load staticfiles%}是正確的profile.html,但它錯了嗎?

+0

您可以添加到您的問題您收到的完整回溯錯誤? – mabe02

+0

你不理解什麼?錯誤消息是完全明確的。擴展必須是profile.html中的第一個標籤。 –

回答

1

錯誤表示您必須先在您的模板中寫extends標記。 你可以閱讀更多關於這documentation

所以,你應該寫{% extends "registration/accounts/base.html" %}首先在profile.html

{% extends "registration/accounts/base.html" %} 
{% load staticfiles %} 
{% block content %} 
    ... 
{% endblock %} 

之後一切都會正常工作!

3

您應該將您的base.html文件視爲佈局,將profile.html視爲在此佈局內呈現的模板文件。

出於這個原因:

  • load staticfiles塊應該base.html插入,並應在要裝入靜態資產的每個文件中插入(見下子彈點)
  • 當你指的靜態資產內src=就足以裝載static路徑幫手
  • profile.html應擴展布局base.html並且{% block content %}中包含的任何內容都將在您的b的塊內容標記內呈現ODY

base.html文件

<html lang="ja"> 
    <head> 
    <meta charset="utf-8"> 
    {% load staticfiles %} 
    <link rel="stylesheet" href="{% static 'bootflat/css/bootflat.min.css' %}"> 
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> 
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> 

    </head> 
    <body> 
    {% block content %} 
    <!-- your body is fine --> 
    {% end block %} 
    </body> 
</html> 

profile.html

{% extends "registration/accounts/base.html" %} 

{% block content %} 
    <a href="{% url 'kenshinresults'%}">SEE YOUR PHOTO</a> 
    <form action="{% url 'accounts:upload_save' %}" method="POST" enctype="multipart/form-data"> 
     {% csrf_token %} 
     <p>SEND PHOTO</p> 
     <input type="file" name="files[]" multiple> 
     <input type="hidden" value="{{ p_id }}" name="p_id"> 
     <input type="submit" value="Upload"> 
    </form> 
{% endblock %} 

編輯 丹尼爾·羅斯曼爲說

+0

您的評論有點令人誤解。通常你會*需要在每個子模板中加載模板標籤;你在這裏不這樣做的原因是因爲無論如何不需要該子模板中的所有HTML。 –

+0

謝謝您的澄清。你想編輯我的答案嗎?否則,我會編輯它相當。 – AnmA