美文网首页
Lesson 9 模板嵌套

Lesson 9 模板嵌套

作者: 拜仁的月饼 | 来源:发表于2020-11-08 20:57 被阅读0次

    0. 引入

    整套课程地址:click here

    我们发现,在一个应用当中,甚至是全局,HTML代码有好多一样的东西,甚至是只需要修改内容。这时候涉及的问题是:那些不变的代码可不可以复用?

    这就涉及到了模板继承与嵌套。

    网上有一篇文章讲的挺好的,可以参考。click here

    1. base.html

    不需要变动的代码可以写到base.html当中。代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <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>
    

    {% block xx %}{% endblock %}是可以被继承、被改写的部分。其他部分则是固定写法。其中,xx{% block %}而起的名字。

    2. 复用

    比如我们修改一下blog_detail.html的代码。

    首先,第一行必须是{% extends "base.html" %}

    例:

    {% extends "base.html" %}
    

    然后就是对继承部分进行改写。示例:

    {% block title %}
        {{ blog_type.type_name }}
    {% endblock %}
    
    {% block content %}
        <p>共有{{ blogs | length }}篇博客</p>
        {% for blog in blogs %}
            <a href = {% url "blog_detail" blog.pk %}><h3>{{ blog.title }}</h3></a>
            {% empty %}
            <p>暂无博客,敬请期待!</p>
        {% endfor %}
    {% endblock %}
    

    可以看出这是对base.html的继承。改写了{% blog title %}与{% blog content %}两部分。

    3. 设置通用templates

    如果一个应用一个应用地设置页面,恐怕比较麻烦。那么我们有没有让多个应用共同使用同一模板的方法?

    答案是templates文件夹放到根目录去

    这时候需要动一下settings.py文件。如下:

    TEMPLATES = [ # 只需要改变TEMPLATES中的"DIRS"键值对就可以了。
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [
                os.path.join(BASE_DIR, "templates"), # 设置默认模板位置。改成这样
            ],
    

    然后在根目录创建templates文件夹。把base.html移动到其中。

    然后再创建templates/blog文件夹,把blog应用创建的模版html页面移动到其中。

    最后修改一下blogs中的views.py文件。如下:

    return render_to_response("blog/blog_list.html", context)
    # 只需要修改一下render_to_response中第一个参数。加上正确的路径即可。
    

    本课结束。

    相关文章

      网友评论

          本文标题:Lesson 9 模板嵌套

          本文链接:https://www.haomeiwen.com/subject/zvtkbktx.html