Django2.0:【Django2.0教程】09.模版嵌套 视频学习笔记

视频链接;【Django2.0教程】09.模版嵌套

常用的模板标签

现在工程中有三个html文件(blog_list.html、blog_detail.html和blogs_with_type.html),它们之中有很多重复的内容,即:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <div>
        <a href="{% url 'home' %}">
            <h3>个人博客网站</h3>
        </a>
    </div>
    <hr>
</body>
</html>

将其取出,放置于另一个文件(base.html)中,并使用模板嵌套标签block:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <div>
        <a href="{% url 'home' %}">
            <h3>个人博客网站</h3>
        </a>
    </div>
    <hr>
    {% block content %}{% endblock %}
</body>
</html>

其中,“title”和“content”为标签的名字,以在使用的时候可以区分。

使用模板嵌套标签extend来扩展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:30 }}</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 %}
    <h3>{{ blog_type.type_name }}</h3>
    {% for blog in blogs %}
        <a href="{% url 'blog_detail' blog.pk %}">
            <h3>{{ blog.title }}</h3>
        </a>
        <p>{{ blog.content|truncatechars:30 }}</p>
        {# 这是注释 #}
    {% empty %}
        <p>---暂无博文,敬请期待---</p>
    {% endfor %}
    <p>一共有{{ blogs|length }} 篇博文</p>
{% endblock %}

全局模板文件夹

如果工程中不止一个APP,而希望有一个共用的base.html,那么将其放在全局模板文件夹中是更好的选择。
新建目录templates,因为程序不能找到这个templates目录,所以修改mysite/settings.py:

...
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
...

移动blog/templates/base.html至templates/。

模板文件设置建议

如果APP封装得特别好,那么html文件就放在APP路径中,否则建议放在templates/中。同时,新建templates/blog/目录,将blog_list.html、blog_detail.html和blogs_with_type.html放于其中,并修改blog/views.py:

...
    return render_to_response('blog/blog_list.html', context)
...
    return render_to_response('blog/blog_detail.html', context)
...
    return render_to_response('blog/blogs_with_type.html', context)
...

猜你喜欢

转载自blog.csdn.net/zhangk9509/article/details/80297711