首页 > 代码库 > Django (二)

Django (二)

Django 模板

HelloWorld/|-- HelloWorld|   |-- __init__.py|   |-- __init__.pyc|   |-- settings.py|   |-- settings.pyc|   |-- urls.py|   |-- urls.pyc|   |-- view.py|   |-- view.pyc|   |-- wsgi.py|   `-- wsgi.pyc|-- manage.py`-- templates    `-- hello.html

  

hello.html 文件代码如下:

<h1>{{ hello }}</h1>

  从模板中我们知道变量使用了双括号。

接下来我们需要向Django说明模板文件的路径,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 为[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‘,            ],        },    },]

  我们现在修改 view.py,增加一个新的对象,用于向模板提交数据:

# -*- coding: utf-8 -*-#from django.http import HttpResponsefrom django.shortcuts import renderdef hello(request):    context          = {}    context[‘hello‘] = ‘Hello World!‘    return render(request, ‘hello.html‘, context)

  

  可以看到,我们这里使用render来替代之前使用的HttpResponse。render还使用了一个字典context作为参数。

context 字典中元素的键值 "hello" 对应了模板中的变量 "{{ hello }}"。

Django 模板标签

  if/else 标签

  基本语法格式如下:

{% if condition %}     ... display{% endif %}

  v

  根据条件判断是否输出。if/else 支持嵌套。

{% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ),例如:

{% if athlete_list and coach_list %}     athletes 和 coaches 变量都是可用的。{% endif %}

  

for 标签

{% for %} 允许我们在一个序列上迭代。

  与Python的 for 语句的情形类似,循环语法是 for X in Y ,Y是要迭代的序列而X是在每一个特定的循环中使用的变量名称。

每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。

例如,给定一个运动员列表 athlete_list 变量,我们可以使用下面的代码来显示这个列表:

<ul>{% for athlete in athlete_list %}    <li>{{ athlete.name }}</li>{% endfor %}</ul>

  可以嵌套使用 {% for %} 标签:

{% for athlete in athlete_list %}    <h1>{{ athlete.name }}</h1>    <ul>    {% for sport in athlete.sports_played %}        <li>{{ sport }}</li>    {% endfor %}    </ul>{% endfor %}

  

模板继承

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

接下来我们先创建之前项目的 templates 目录中添加 base.html 文件,代码如下:

 

<html>  <head>    <title>Hello World!</title>  </head>  <body>    <h1>Hello World!</h1>    {% block mainbody %}       <p>original</p>    {% endblock %}  </body></html>

  

Django (二)