• Django(框架、模板)


    day65

    参考:https://www.cnblogs.com/liwenzhou/p/8296964.html

    Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。

    Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

    Django的MTV模式

           Model(模型):负责业务对象与数据库的对象(ORM)

           Template(模版):负责如何把页面展示给用户

           View(视图):负责业务逻辑,并在适当的时候调用Model和Template

    此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

    Django框架图示

    模板

    详细参考:http://www.cnblogs.com/liwenzhou/p/7931828.html

    常用语法

    官方文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for

    只需要记两种特殊符号:

    {{  }}和 {% %}

    变量相关的用{{}},逻辑相关的用{%%}。

    a.目前学过的模板语言

    b.其他

     1 class Person(object):
     2     def __init__(self, name, age):
     3         self.name = name
     4         self.age = age
     5 
     6     def dream(self):
     7         return "执行方法(只能调用不带参数的方法)"
     8     def __str__(self):
     9         return "<Person Object: {}>".format(self.name)
    10 # 模板语言测试
    11 def template_test(request):
    12     file_size = 12345678
    13     from datetime import datetime
    14     now = datetime.now()
    15     name = "小黑"
    16     age = 18
    17     a_html = "<a href='http://www.douban.com'>我是后端的a标签</a>"
    18     script_html = "<script>for(var i=0;i<100;i++){alert(123);}</script>"
    19     name_list = ["嘟嘟", "劳斯莱斯", "牛奶"]
    20     name_list2 = [["啦啦0", "李伟师0", "薯片0"], ["嘟嘟1", "劳斯莱斯1", "牛奶1"]]
    21     name_dict = {"first_name": "fuck", "last_name": "shit"}
    22     p1 = Person("alex", 56)
    23     p2 = Person("lulu", 18)
    24     p_list = [p1, p2]
    25     p_str = '''世界的眼睛、红楼梦、繁华、追风筝的人、巴别塔之犬'''
    26     return render(
    27         request,
    28         "t_test.html",
    29         {
    30             "name": name,
    31             "age1": age,
    32             "name_list": name_list,
    33             "name_list2": name_list2,
    34             "name_dict": name_dict,
    35             "p1": p1,
    36             "p2": p2,
    37             "p_list": p_list,
    38             "file_size": file_size,
    39             "now": now,
    40             "a_html": a_html,
    41             "script_html": script_html,
    42             "p_str": p_str
    43         }
    44     )

    模板中支持的写法:

    Filters(过滤器)

     

    自定义filter

    自定义过滤器只是带有一个或两个参数的Python函数:

    • 变量(输入)的值 - -不一定是一个字符串
    • 参数的值 - 这可以有一个默认值,或完全省略

    例如,在过滤器{{var | foo:'bar'}}中,过滤器foo将传递变量var和参数“bar”

    在app01下新建一个名为templatetags的package

    myfilter.py

     1 from django import template
     2 register = template.Library()
     3 
     4 # 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫sb
     5 @register.filter(name="sb")
     6 def add_sb(arg):
     7     return "{} sb啊.".format(arg)
     8 
     9 
    10 # 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫addstr
    11 @register.filter(name="addstr")  #告诉html用addstr这个名字可以调用这个方法
    12 def add_str(arg, arg2):
    13     """
    14     第一个参数永远是管道符前面那个变量
    15     :param arg: 道符前面那个变量
    16     :param arg2: 冒号后面的变量
    17     :return:
    18     """
    19     return "{} {}.".format(arg, arg2)

    实践:

    Tags

    <p>for循环</p>
    <ul>
        {% for name in name_list %}
            {% if forloop.last %}
    {#                                     forloop.revcounter     当前循环的倒序索引值(从1开始)#}
                <li class="dsb">{{ forloop.revcounter }}-{{ name }}</li>
            {% else %}
                <li class="{% if forloop.first %}'sb'{% endif %}">{{ forloop.revcounter }}-{{ name }}</li>
            {% endif %}
        {% endfor %}
    </ul>
    
    <hr>
    <p>双层循环</p>
    {% for name in name_list2 %}
        {% for name1 in name %}
    {#        {{ forloop.parentloop.counter }}#}
    {#        {{ forloop.counter }}#}
            {{ name1 }}
        {% endfor %}
    {% endfor %}
    
    <hr>
    
    <p>if/ elif/ else</p>
    {% if p3 %}
        <p>p3:{{ p3 }}</p>
    {% elif p2 %}
        <p>p2:{{ p2 }}</p>
    {% else %}
        <p>什么人都没有!</p>
    {% endif %}
    
    <hr>
    
    {#计算列表长度#}
    {% if name_list|length >= 3 %}
        <p>需要打两辆车</p>
    {% else %}
        <p>一辆足矣!</p>
    {% endif %}
    
    <hr>
    
    <p>with语句</p>
    {{ name_list2.1.1 }}
    
    {% with name=name_list2.1.1 %}
    {#    定义一个中间变量,多用于给一个复杂的变量起别名。#}
        {{ name }}
    {% endwith %}
    <hr>

    结果:

    数据库中找不到数据时显示:

  • 相关阅读:
    正则表达式(四)--文本换行分割
    java加密类型和算法名称
    记事本记录日志
    DNS
    jstl--c:choose标签
    csv文本编辑引号问题
    JDBC----ReflectionUtils
    Jsp
    计算机网络 编程 总结:
    N颗骰子的问题
  • 原文地址:https://www.cnblogs.com/112358nizhipeng/p/10334868.html
Copyright © 2020-2023  润新知