django-web系统模板

1.采用Django web模板的原因:

      (1)要求变量和HTML尽量分开

       (2)HTML和 python要分开

2.创建是的基本思路:

   首先:要确定表达的形式

         加载模板

        From django.template import Template

        Template(string)

   其次:要确定表达的内容

            封装数据

             From django.template import Template

             Context(data)

   最后:表达的形式加载表达的内容

           template.render(context(data))

 完整代码
from django.template import Template,Context

def invite(request,name):
    template = Template(
    """
    谨定于 {{ year }} 年 {{ month }} 月 {{ day }} 日:<br>
    农历 {{ calendar }} 为 {{ groom }} {{ birde }} 举办 婚礼,略备薄酒,恭候 {{ sir }} 光临{{ hotel }}.<br>
    地址:{{ address }}<br>
                                        敬约 恕邀<br>
                                        时间: 下午{{ time }} 恭候<br>
    """
    )
    data = Context({
    "year":"2019",
    "month":"3",
    "day":"28",
    "calendar":"腊月初五",
    "groom":"喜洋洋",
    "birde":"暖洋洋",
    "sir":name,
    "hotel":"羊村大酒店",
    "address":"青青草原羊村路48羊村大酒店三楼",
    "time":"六时整",
    })
    result = template.render(data)
    return HttpResponse(result)

3.Django 模板标签语言

(1)变量

       {{变量}}

       1.传去前端的变量最外层一定是一个字典

        2.具体的变量可以是字符串、列表、字典类型

       3.变量可以通过 “ ·”方法调用自己的无参数的方法、索引

       4、如果变量是字典也可同过键调用值

案例:

def variable(request):
    """
    变量案例
    """
    tem = Template(
        """
            <p>
                变量常规用法:{{ variable }}
            </p>
            <p>
                变量常规用法_变量列表:{{ variable1 }}
            </p>
            <p>
                变量常规用法_变量索引:{{ variable1.1 }}
            </p>
            <p>
                变量常规用法_变量无参数方法:{{ variable2.upper }}
            </p>
            <p>
                变量常规用法_变量字典:{{ variable3 }}
            </p>
            <p>
                变量常规用法_变量字典键取值:{{ variable3.name }}
            </p>            
        """
    )
    data = Context({
        "variable": "老边",
        "variable1": [1,2,3,4],
        "variable2": "laobian",
        "variable3": {"name":"老边","age":18},
    })
    result = tem.render(data)
    return HttpResponse(result)

 

(2)标签

        { %if% }标签:

        1、 双标签判断结束:{%if%}{%endif%}

         2、{%if%} 通常判断一个变量是否存在或者是否为真,判断指定的条件True或False

         3、{%if%}标签可以有{%elif%} 和{%else%}

         案例:

def label_if(request):
    """
    if 标签
    """
    tem = Template(
        """
            {% if username %}
                <p>欢迎登陆 {{ username }} </p>
            {% else %}
                <p>
                    <a href="#">
                        请登陆
                    </a>
                </p>
            {% endif %}         
        """
    )
    data = Context({
        "username": "老边",
    })
    result = tem.render(data)
    return HttpResponse(result)

           

       {%ifequal %}标签

        1、判断两个量是否相等,通常用于比较

        2、双标签判断结束:{%ifequal%}{%endifequal%}

        3、 {%ifequal%}也可以有{%else%}

        {%for%}标签

        双标签判断结束:{%for%}{%endfor%}

        {%for%}采用了和Python一样的{% for i in range%}结构遍历

         for 循环出来的不是HTML对象,只是数据

         案例

          

def label_ifequal(request):
    """
    ifequal 标签
    """
    tem = Template(
        """
            {% ifequal gender "M" %}
                <p>欢迎登陆 {{ username }} 先生 </p>
            {% else %}
                <p>欢迎登陆 {{ username }} 女士 </p>
            {% endifequal %}         
        """
    )
    data = Context({
        "username": "老边",
        "gender": "W"
    })
    result = tem.render(data)
    return HttpResponse(result)

           

       {% for %}

          1、{% for %} 标签需要 {% endfor %} 标签进行闭合

          2、{% for %} 标签采用了和python一样的for in结构。

          3、{% for %} 循环出来的不是html对象只是数据

          案例:

           

def label_for(request):
    """
    ifequal 标签
    """
    tem = Template(
        """
            <table>
            <tr>
                    <th>
                        标题
                    </th>
                    <th>
                        作者
                    </th>
                    <th>
                        类型
                    </th>
                    <th>
                        封面
                    </th>
            </tr>
            {% for article in articles %}
                <tr>
                    <td>
                        {{ article.title }}
                    </td>
                    <td>
                        {{ article.author }}
                    </td>
                    <td>
                        {{ article.type }}
                    </td>
                    <td>
                        <img style = "width:100px;height:100px;" src="{{ article.picture }}">
                    </td>
                </tr>
            {% endfor %}
            </table>         
        """
    )
    data = Context({
        "articles": [
            {"title": "背影","author": "朱自清","type": "散文", "picture":"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553750586542&di=18fa022c5ec799d65558c2bf299d0023&imgtype=0&src=http%3A%2F%2Fimg3.duitang.com%2Fuploads%2Fitem%2F201507%2F05%2F20150705135641_K4sVA.jpeg"},
            {"title": "诛仙", "author": "萧鼎", "type": "小说", "picture": "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=328549116,1379468112&fm=26&gp=0.jpg"},
            {"title": "西游记", "author": "吴承恩", "type": "小说","picture": "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4100856954,312579948&fm=26&gp=0.jpg"},
            {"title": "鲁宾逊漂流记", "author": "丹尼尔·笛福", "type": "小说", "picture": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553750785199&di=d906d54cf8456736d285b99f601bb968&imgtype=jpg&src=http%3A%2F%2Fimg4.imgtn.bdimg.com%2Fit%2Fu%3D1665326279%2C2802541090%26fm%3D214%26gp%3D0.jpg"},
            {"title": "活着", "author": "余华", "type": "小说", "picture": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553750868172&di=ccae9a343204f59cecbcc21c9e811e58&imgtype=0&src=http%3A%2F%2Fs1.sinaimg.cn%2Flarge%2F001Pe7mxzy76VARpXvdc3"},
        ],
    })
    result = tem.render(data)
    return HttpResponse(result)

          

        {{forloop}}标签

         1、 Django模板定义好的一个遍历,用来表示循环中的每次循环

         2、 forloop为甜头循环提供parentloop参数来记录当前循环的上一层情况

         3、  通常我们使用forloop标签进行循环的开头或者结尾

           案例:

          

def label_forloop(request):
    """
    forloop 教学版
    """
    tem = Template(
        """
            <h3>单层循环</h3>
            <ul>
            {% for i in range %}
                {% for title in articles %}
                    <li>
                        {{ title }} 是第 {{ forloop.counter }} 次循环 他的父循环是第 {{ forloop.parentloop.counter }} 次循环
                    </li>
                {% endfor %}
                {% if not forloop.last %}
                <p> ============================================================= </p>
                {% endif %}
                
            {% endfor %}
        """
    )
    data = Context({
        "articles": ["背影", "诛仙", "西游记", "鲁宾逊漂流记", "活着"],
        "range": "abc"
    })
    result = tem.render(data)
    return HttpResponse(result)

(3)过滤器

  {{  |  }}

Safe 去掉前端转义

   对变量进行具体功能的处理,比如转义、大写、小写等

  {{  argv   |  safe  }}去掉前端转义

  {{  argv| upper }}     全部大写  

  

def filter(request):
    template = Template(
        """
            {{ argv|safe }}
        """
    )
    context = Context(
        {"argv": "<img src='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553764577707&di=8606cc4a988ec1bc8e6b3924fdfa8790&imgtype=0&src=http%3A%2F%2Ftc.sinaimg.cn%2Fmaxwidth.2048%2Ftc.service.weibo.com%2Finews_gtimg_com%2F0fcdfe79cf544cf40f75f5d15511a159.jpg'>"}
    )
    result = template.render(context)
    return HttpResponse(result)

   

4.Django当做独立的系统模板

(1)创建模板目录

          在项目的根目录下创建模板目录

(2)添加模板路径

        在settings.py设置文件下添加模板路径

(3)加载使用模板

5.超链接

/ 出现在HTML标签的路径中表示分割路径,如果出现在开头表示根,否则从当前开始连接

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值