• django--T(模板)


    {{ }}表示变量,在模板渲染的时候替换成值,

    {% %}表示标签,进行逻辑相关的操作。

    在双大括号/变量中的一般用  点 来获取对象的相关属性和方法  .操作只能调用不带参数的方法

     1 # 如下--view中的代码:
     2 
     3 def template_test(request):
     4     m = [11, 22, 33]      #在HTML中 {{m.0}} 取的是m中的第一个参数11
     5     d = {"name": "xiao"}    #在HTML中 {{d.name}} 取的是字典中key的值xiao /通过方法.values 获得所有的values值 /.items 获得键值对
     6 
     7     class Person(object):
     8         def __init__(self, name, age):
     9             self.name = name
    10             self.age = age
    11 
    12         def dream(self):
    13             return "{} is dream...".format(self.name)
    14 
    15     xiao1 = Person(name="xiao1", age=34)
    16     xiao2 = Person(name="xiao2", age=9000)
    17     xiao3 = Person(name="xiao3", age=18)
    18 
    19     person_list = [xiao1, xiao2, xiao3]      .0.name获取对象的name属性/.0.dream 获取对象的方法
    20     return render(request, "template_test.html", {"m": m, "d": d, "person_list": person_list})

    注:当模板系统遇到一个(.)时,会按照如下的顺序去查询:

    1. 在字典中查询
    2. 属性或者方法
    3. 数字索引

    过滤器:  {{变量名|过滤器:参数}}  语法: {{ value|filter_name:参数 }}   # 参数最多只有一个

    1内置过滤器:

      1.default  {{value|default:"nothing"}}  

        提供默认值,如果value值为空就显示nothing

        另:在setting->TEMPLATES->OPTIONS添加 string_if_invalid:'找不到'  会拥有一样的功能

      2.date 日期格式化  {{now|date:'Y-m-d H:i:s'}}

        另:在setting->USE_L10N=false/DATETIME_FORMAT='Y-m-d H:i:s'  具有同样的功能

      3.safe 不进行转义

        {{js|safe}}  django默认是转义的

    2.自定义filter

      定义:

        1.在APP下创建一个叫templatetags的python包;  必须是包,必须是templatetags

        2.在包中创建一个py文件

        3.在py文件中写代码:

          from django import template

          register=template.Library()  register的名字不能改

        4.写函数并给定义的函数加装饰器

          @register.filter
          def add_dsb(value, arg):
              return "{}_{}".format(value, arg)

      在模板(HTML)中使用:

          1.导入定义的文件:  {% load my_filter %}    py文件名可变

          2.使用过滤器    {{ name|add_dsb:'very_dsb' }}   变量 函数名 参数

    注意!!!在form表单中添加{% csrf_token %} 提交POST请求时可以通过django的验证

    1.母版:就是一个普通的HTML文本,将多个页面公共部分的内容提取出来,在页面中定义多个block块

    {% block content %}
    {% endblock %}

    2.继承:在子页面中,继承母版  {% extends  'base.html'  %}

      在子页面中通过定义母板中的block名来对应替换母板中相应的内容。

    {% block content %}
      <p>世情薄</p>
      <p>人情恶</p>
      <p>雨送黄昏花易落</p>
    {% endblock %}

    3.组件:把多个页面公用的HTML代码放到一个HTML文件中

        在需要使用的地方导入语法即可  {% include  ‘nav.html’  %}

        

    4.静态文件:在平时导入静态文件时,会用到相对路径或绝对路径,但会遇到这种情况:改setting中 STATIC_URL 的路径,

         这时一改就需要将所有相关的导入路径都要改一遍,下面的方法就可以避免这种情况,路径会一起改变.

       {% load static %}

        {% static  '静态文件相对路径' %}    ——》 获取到别名,跟后面的参数进行拼接

      如:<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.3.7/css/bootstrap.css' %}">

        {% get_static_prefix %}  ——》 获取到别名

      如:<link rel="stylesheet" href="{% get_static_prefix %}plugins/bootstrap-3.3.7/css/bootstrap.css">

  • 相关阅读:
    漂亮的自适应宽度的多色彩CSS图片按钮
    Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet())
    QT的父子Widget之间消息的传递(如果子类没有accept或ignore该事件,则该事件会被传递给其父亲——Qlabel与QPushButton的处理就不一样)
    QT内置的ICON资源
    QT事件过滤器(QT事件处理的5个层次:自己覆盖或过滤,父窗口过滤,Application过滤与通知)
    QMetaObject感觉跟Delphi的类之类有一拼,好好学一下
    POJ 1013 小水题 暴力模拟
    WMDestroy函数调用inherited,难道是为了调用子类覆盖函数?还有这样调用的?
    技术资深、还关注市场的几率较高
    有感,懂市场比懂产品重要,懂产品比懂技术重要——想起凡客诚品和YY语音了
  • 原文地址:https://www.cnblogs.com/leo-tail-x/p/10061229.html
Copyright © 2020-2023  润新知