Djando模板

来源:互联网 发布:软件测试工资待遇2017 编辑:程序博客网 时间:2024/06/07 06:48

Djando模板

在上一章节中,我们使用django.http.HttpResponse()来输出”Hello World!”,实际上并没有遵守MVT模式。

下面针对上面的程序做一个修改,使其符合MVT模式。

  1. 在test_django工程目录,创建一个templates目录,这个目录用于存放模板。

  2. 在templates目录创建一个hello.html文件

    整个目录结构如:

    image

    hello.html文件代码:

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body>    {{abc}} # 这个是django用于占位的,具体看下文</body></html>
  3. 在test_django目录下的settings.py文件中,修改TEMPLATES中的DIR为[BASE_DIR+”/templates”],如下所示:

TEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [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',            ],        },    },]
  1. 修改view.py中的显示
from django.shortcuts import renderdef hello(request):    context = {}    context['abc'] = 'abc占位的内容:一行白鹭上青天'     # 这里abc,赋值的内容,就会替代hello.html文件中的{{abc}}    # 这里context不要写成这样:    # context = {'abc':'abc占位的内容:一行白鹭上青天'},这样写,context是set类型    return render(request=request, template_name='hello.html', context=context)
  1. 启动服务后,在浏览器输入:127.0.0.1:8000,如图:

image


Django模板标签

  1. if/else标签
{% if condition %}    ...{% endif %}或者{% if condition1 %}    ...{% elif condition2 %}    ...{% else %}    ...{% endif %}
  1. for标签
# 正序迭代{% for item in list %}    ...{% endfor %}eg:<ul>    {% for item in list %}        <ul>{{item}}    {% endfor %}</ul># 反向迭代{% for item in list reversed %}    ...{% endfor %}
  1. ifequal/ifnotequal
ifequal:如果相等ifnotequal:如果不相等# 比较a,b两个变量{% ifequal a b %}       ...{% endifequal %}或者{% ifequal a b %}    ...{% else %}    ...{% endifequal %}
  1. 注释标签
{# 注释内容 #}
  1. 过滤器

模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:

{{ name | lower }}  # {{name}}变量被过滤器lower处理后,文档大写转成小写。{{ name | first | upper }}  # {{name}}的首字母转成大写{{name | truncatewords:"5"}}   # 显示{{name}}变量的前5个字符除此之外还有addslashes,data,length过滤器
  1. include标签

include标签允许在模板中包含其他的模板的内容。

{{% include "nav.html" %}}  包含nav.html
  1. 模板的继承

    模板可以使用继承的方式来实现复用。

    1.接下来在templates目录创建一个base.html文件,文件内
    容如下:

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body>    <h2>{% block title %}标题{% endblock %}</h2>    <h4>{% block author %} 作者 {% endblock %}</h4>    {% block mainbody %}<p>段落</p>{% endblock %}</body></html>

    2.创建一个article.html文件

    {% extends "base.html" %}   # 表示继承base.html{% block title %}   # 替换base.html中的占位内容,下同    背景{% endblock %}{% block author %}    朱自清{% endblock %}{% block mainbody %}    我与父亲不相见已二年余了,我最不能忘记的是他的背影。{% endblock %}

    3.修改view.py的显示

    from django.shortcuts import renderdef hello(request):    return render(request=request, template_name='article.html')

    4.启动服务,浏览器输入127.0.0.1:8000,显示如下:

    image