zoukankan      html  css  js  c++  java
  • 【三】Django模版的使用

    作为Web框架,Django提供了模板,可以很便利的动态生成HTML

    模版系统致力于表达外观,而不是程序逻辑

    模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用

    模板包含 HTML的静态部分、动态插入内容部分

    Django模板语言,简写DTL,定义在django.template包中


    创建简单的Template对象(以下 均在在控制台输入,而且要先输入 python3 manage.py shell) 

    from django.template import Template
    
    t = Template('My name is {{name}}.')
    print(t)

    输入结果 是该对象的地址


    渲染模版:本质是 通过一个字典,将key映射到 变量值,然后取到对应的value,最后通过render()方法传入,举例:

    from django.template import Template, Context
    
    t = Template('My name is {{name}}.')
    c = Context({'name':'Lverson'})
    t.render(c)

    查看输入结果

    为什么都要在控制台输入呢?为什么要先输入 python3 manage.py shell?

    manage.py shell 命令有个关键点:在启动解释器之前,告诉 Django 使用哪个设置文件。

    Django 的很多部分,包括模板系统,依赖于设置,如果不告诉 Django 使用 哪个设置,你就无法使用它们。

    原理:Django 查找一个名为 DJANGO_SETTINGS_MODULE 的环境变量,其值是导入 settings.py 的路径。例如,DJANGO_SETTINGS_MODULE 的值 可能是 'mysite.settings'(假设 mysite 在 Python 路径中)。执行 python manage.py shell 命令时,它会为你设定 DJANGO_SETTINGS_MODULE。

    在这些示例中必须使用 python manage.py shell,否则 Django 会 抛出异常。 

    如果是在 编译器中输入上述代码,需要加上两行代码,目的也是导入 setting.py的路径,但是依然会报错(百度查报错解决 还是需要在控制台输入)

    from django.conf import settings
    
    settings.configure()

    总结Django 模板系统的基本用法:

    编写模板字符串

    创建 Template 对象

    创建 Context 对象

    调用 render() 方法 


    同一个模版 使用同一个地址,所以可以传入不同的值、多次调用,举例 通过for循环依次读入name

    注意for循环 内部要有缩行,否则不符合python规范,会报错


    【基本的模版标签】

    if/else

     {% if %} 中 可以嵌套  {% if %} ,但是每个 {% if %} 都必须有配对的 {% endif %}。否则,Django 会抛出 TemplateSyntaxError 异常。 

    {% if today_is_weekend %}
    <p>Welcome to the weekend!</p>
    {% else %}
    <p>Get back to work.</p>
    {% endif %}

    for

    和python中的 for 循环一样,

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

     ifequal/ifnotequal

    变量之间做比较:比较 user 和 currentuser的值

    {% ifequal user currentuser %}
            <h1>Welcome!</h1>
    {% endifequal %}

    与字符串做比较:比较 section 和“sitenews”是有相同

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

    注释:单行注释

    {# This is a comment #}

    注释:多行注释 {% comment %}

    {% comment %}
    This is a
    multi-line comment.
    {% endcomment %}

    过滤器:模板过滤器是在显示变量之前调整变量值的简单方式

     如下所示:代码先通过 lower 过滤器调整 {{ name }} 变量的值——把文本转换成小写,然后再显示。

    {{ name|lower }}

     下述示例获取列表中的第一个元素,然后将其转换成大写:

    {{ my_list|first|upper }}

    下面是几个最重要的过滤器。

    • addslashes:在反斜线、单引号和双引号前面添加一个反斜线。可用于转义字符串。例如:{{ val- ue|addslashes }}。

    • date:根据参数中的格式字符串格式化 date 或 datetime 对象。例如:{{ pub_date|date:"F j, Y" }}。格式字符串在附录 E 中说明。

    • length:返回值的长度。对列表来说,返回元素的数量。对字符串来说,返回字符的数量。如果变量 未定义,返回 0。


  • 相关阅读:
    LoadRunner使用记录
    JVM&GC详解
    常用网络操作命令
    IP地址、子网掩码、网络号、主机号、网络地址、主机地址详解
    交换机配置记录
    持续集成与自动化部署---代码流水线管理及Jenkins和gitlab集成
    Git的安装与使用详解
    性能测试---问题记录
    性能测试---实战篇
    c++实用快捷键
  • 原文地址:https://www.cnblogs.com/lwj-0923/p/11907283.html
Copyright © 2011-2022 走看看