【Django学习笔记】8:在templates目录下使用DjangoTemplates模板

templates目录

前面了解过了在Django中HTML文件可以放在项目目录下的templates目录下,这个目录名字翻译过来就是模板的意思,对这一情况不太明白。

实际上这个目录下理应放的正是一种HTML模板,对于网站而言,很多页面的结构有类似的成分,将这些共同的成分抽象出来就可以形成模板了。例如导航条、脚标栏等往往是一样的。

页面继承一个模板,也就具有了这个模板所具备的所有成分。而对于那些不一样的地方,比如页面的具体内容等,可以对模板上的内容进行添加和覆盖,这样就形成了风格统一的各个页面,而且还能避免重复代码,还能提高可维护性。

DjangoTemplates是Django的默认模板引擎,可以在配置目录下的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',
            ],
        },
    },
]

也可以将其换成基于该默认模板的Jinja2模板,它们的语法很相似,暂时就不换了。前面说的Jinja2动态页面,其实是在用这个模板原型。

简易的使用模板的例子

建立一个base.html作为模板:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}默认标题{% endblock %}-标题的共同部分</title>
</head>
<body>
{#引入导航条#}
{% include 'nav.html' %}

{#默认内容区域#}
{% block content %}
    <div>
        这里是默认内容
    </div>
{% endblock %}

{#引入尾标#}
{% include 'bottom.html' %}
</body>
</html>

像导航条和尾标这样基本不会改变的内容,也即是模板直接引用的页面,应当和模板一样放在templates目录下。

修改index.html来引用这个模板:

{% extends 'base.html' %}

{#在继承了模板之后,只需要覆盖要修改的block即可#}

{% block title %}
    首页
{% endblock %}

{% block content %}
    <div>
    首页上的内容...
    </div>
{% endblock %}

语义上而言,这样的页面不必和模板放在一起,为了测试方便这里还是放在一起。可以看到对这个页面的书写已经完全不遵循HTML应有的样子了,只需要用Jinja2语法覆盖掉要修改的模板中的block部分即可。

浏览器访问结果:
这里写图片描述

DjangoTemplates模板在页面上的基本语法

访问从render的第三个参数字典传来的value

{{ key }}

按下标循环遍历列表

{% for i in 指示value为列表的key %}
{{ i }}
{% empty %}
{#到这里说明列表为空#}
{% endfor %}

按key访问字典中的value

{{ 指示value为字典的key.要访问的valuekey }}

条件分支

{% if 表达式1 %}
...
{% elif 表达式2 %}
...
...
{% elif 表达式n %}
...
{% else %}
...
{% endif %}

其中的表达式和python中的使用一样,可以使用notandor等修饰。

扫描二维码关注公众号,回复: 1829516 查看本文章

猜你喜欢

转载自blog.csdn.net/SHU15121856/article/details/80865178
今日推荐