1. 程式人生 > >【Django2.0教程】09.模版巢狀

【Django2.0教程】09.模版巢狀

1、一個網站有很多相似的網頁,這樣就可以建立一個base.html在templates資料夾下

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <div>
       <a href="{% url 'home' %}">
         <h2>個人部落格網站</h2>
     </a>

    </div>
    <hr>
    {% block content %}{% endblock %}


</body>
</html>
2、有了這個base.html,其他三個模板就可以巢狀進來

blog_list.html

{% extends 'base.html' %}
{# 頁面標題 #}
{% block title %}
    我的部落格網站
{% endblock %}
{# 頁面內容 #}
{% block content %}
     {% for blog in blogs %}
        <a href="{% url 'blog_detail' blog.pk %}">
            <h3>{{ blog.title }}</h3>
        </a>

        <p>{{ blog.content|truncatechars:20 }}</p>
    {% empty %}
        <p>---暫無部落格,敬請期待---</p>
    {% endfor %}
    <p>一共有{{ blogs|length }} 篇部落格</p>
{% endblock %}

blog_detail.html

{% extends 'base.html' %}
{# 頁面標題 #}
{% block title %}
    {{ blog.title }}
{% endblock %}
{# 頁面內容 #}
{% block content %}
    <h3>{{ blog.title }}</h3>
    <p>作者:{{ blog.author }}</p>
    <p>發表日期:{{ blog.created_time|date:"Y-m-d"}}</p>
    <p>分類:
        <a href="{% url 'blogs_with_type' blog.blog_type.pk %}">
            {{ blog.blog_type }}
        </a>
    </p>
    <p>{{ blog.content }}</p>
{% endblock %}

blogs_with_type.html

{% extends 'base.html' %}
{# 頁面標題 #}
{% block title %}
    {{ blog_type.type_name }}
{% endblock %}
{# 頁面內容 #}
{% block content %}
     <h2>{{ blog_type.type_name }}</h2>
    {% for blog in blogs %}
        <a href="{% url 'blog_detail' blog.pk %}">
            <h3>{{ blog.title }}</h3>
        </a>

        <p>{{ blog.content|truncatechars:20 }}</p>
    {% empty %}
        <p>---暫無部落格,敬請期待---</p>
    {% endfor %}
    <p>一共有{{ blogs|length }} 篇部落格</p>
{% endblock %}

3、base.html位置的更換

在mysite資料夾力新建templates資料夾,並且在settings.py中更改

'DIRS': [os.path.join(BASE_DIR,'templates')],

然後將blog/templates裡面額base.html剪下到mysite/templates資料夾中。並在mysite/templates中新建blog,把blog/templates裡的其他幾個html也剪下到這裡來,然後修改views.py中每個檢視的返回值中的html名稱 ,在每個前面加上blog/,這樣就可以訪問啦!