• Django学习系列之模板


    什么是django模板

    模板是一个文本,用于分离文档的表现形式和内容,模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)

    模板通常用于产生HTML

    如何使用模板

    1. 创建一个Template对象
    2. 传入一套变量context,调用render方法,它将返回一个基于模板的展现字符串,模板中的变量和标签会被context值替换
    F:PythonPyCharmProjectcmdb>python manage.py shell
    Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from django.template import Context,Template
    >>> t = Template('my name is {{ name }}')
    >>> c = Context(['name':'zhai'])
    >>> t.render(c)
    'my name is zhai

    PS:这就是使用django的的基本规则,写模板、创建Template对象,调用render()方法

    模板标签

    if/else标签

    基本语法格式如下

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

    或者

    {% if condition1 %}
       ... display 1
    {% elif condiiton2 %}
       ... display 2
    {% else %}
       ... display 3
    {% endif %}

    根据条件判断是否输出,if/else支持潜逃

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

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

    for标签

    跟python的for一样 

    {% for x in y%}
    ...
    {% endfor %}

    ifeqal/ifnoteqal标签

    {% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值

    下面的例子比较两个模板变量 user 和 currentuser 
    {% ifequal user currentuser %}
        <h1>Welcome!</h1>
    {% endifequal %}

    和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签

    {% ifequal section 'sitenews' %}
        <h1>Site News</h1>
    {% else %}
        <h1>No News Here</h1>
    {% endifequal %}

    include标签

    每当多个模板中出现相同的代码时,就可以考虑使用{% include %}标签来减少重复

    下面例子包含了nav.html模板

    {% include "nav.html" %}

    Django模板继承

    本质上来说,模板继承就是先构建一个基础的模板框架,而后再其子模板中对它所包含站点公用部分和定义块进行重载

    定义基础模板base.html,该框架之后将由子模板current.html集成

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}{% endblock %}</title>
    </head>
    <body>
        <h1>My helpful timestamp site</h1>
        {% block content %}{% endblock %}
        {% block footer %}
        <hr>
        <p>Thanks for visiting my site.</p>
        {% endblock %}
    </body>
    </html>

    note:{% block %}标签就是告诉模板引擎,该模板下的这一块内容将有可能被子模板覆盖

    定义子模板current.html

    {% extends "includes/base.html" %}
    {% block title %}The current time{% endblock %}
    {% block content %}
    <p>It is now {{ current_date }}.</p>
    {% endblock %}

    note:

    1. 在加载current.html模板时,模板引擎发现了{% extends %}标签,表示这个模板是子模板,模板引擎立即加载父模板,即base.html
    2. 此时模板引擎注意到base.html中的三个{% block %}标签,子模板里有两个{% block %},所以子模板的block会替换父模板的block内容;剩下一个block子模板中没有定义,所以用父模板的内容
  • 相关阅读:
    SQL Server OPENQUERY使用
    VS2013程序打包报 ISEXP : error -****: An error occurred streaming
    IIS重新注册
    c#之反射(Reflection)
    c#之Lambda表达式
    c#之委托事件(DelegateEvent)
    c#之委托详解(Delegate)
    git将文件托管到github上遇到的问题
    c#之泛型详解(Generic)
    linux下操作memcache的操作命令
  • 原文地址:https://www.cnblogs.com/chadiandianwenrou/p/6094597.html
Copyright © 2020-2023  润新知