• 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 HttpResponse
    from django.shortcuts import render
    
    def 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>
    

      

  • 相关阅读:
    Prototype源码浅析——Object部分(一)
    JS构建页面的DOM节点结构(二)
    Prototype源码浅析——Object部分(二)之类型检测
    createElement与createDocumentFragment的点点区别
    Prototype源码浅析——Function.prototype部分(二)
    CSS3月食
    javascript管中窥豹——形参与实参
    JS获取整个页面的文档
    2012年总结
    Windows下Android环境搭建(最新最方便)
  • 原文地址:https://www.cnblogs.com/postgres/p/5858529.html
Copyright © 2020-2023  润新知