zoukankan      html  css  js  c++  java
  • django-html模板(模板的执行、模板语言、自定义simple_tag)

    模板

    1、模版的执行

    模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

    def current_datetime(request):
        now = datetime.datetime.now()
        html = "<html><body>It is now %s.</body></html>" % now
        return HttpResponse(html)
    from django import template
    t = template.Template('My name is {{ name }}.')
    c = template.Context({'name': 'Adrian'})
    print t.render(c)
    复制代码

    import datetime
    from django import template
    import DjangoDemo.settings

    now = datetime.datetime.now()
    fp = open(settings.BASE_DIR+'/templates/Home/Index.html')
    t = template.Template(fp.read())
    fp.close()
    html = t.render(template.Context({'current_date': now}))
    return HttpResponse(html

    复制代码
    复制代码

    from django.template.loader import get_template
    from django.template import Context
    from django.http import HttpResponse
    import datetime

    def current_datetime(request):
    now = datetime.datetime.now()
    t = get_template('current_datetime.html')
    html = t.render(Context({'current_date': now}))
    return HttpResponse(html)

    复制代码
    return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))

    2、模版语言

    模板中也有自己的语言,该语言可以实现数据展示

    • {{ item }}
    • {% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}
        forloop.counter
        forloop.first
        forloop.last 
    • {% if ordered_warranty %}  {% else %} {% endif %}
    • 母板:{% block title %}{% endblock %}
      子板:{% extends "base.html" %}
         {% block title %}{% endblock %}
    • 帮助方法:管道符后面接的是格式或者条件,这种是filter方式,
      {{ item.event_start|date:"Y-m-d H:i:s"}}
      {{ bio|truncatewords:"30" }}
      {{ my_list|first|upper }}
      {{ name|lower }}
    • 还有一种自定义filter,和自定义sumple_tag的不同是只能传两个参数,而且用{{}}表示,而simple_tag是用{% %}的,

    调用模板:extends,只能继承一个调用小插件:incloud 可以引入多个小插件,而且引入的插件也可以渲染,导入之前,小插件就已经渲染好了;

     tips:在模板语言里面有一个管道符:{{ aaa|safe }},假设aaa是一个变量,如果不加safe,页面显示的是一个字符串,加了safe会将其变成标签或者对应的数据,因为网页设计里面默认所有输入的数据都是不安全的,还有一种方式是在后台就可以让其转变为安全的(就是下面simple_tag里面import的一列):

    from django.utils.safestring import mark_safe

    aaa=mark_safe(aaa)

    这样传送到前段后aaa就不用加管道符也能显示为标签

     

    3、自定义simple_tag

    缺点:不能作为if条件,优点:参数任意

    a、在app中创建templatetags文件夹,名字不能修改成其他的,只能是这个名字

    b、在templatetags文件夹下面创建任意 .py 文件,如:xx.py,名字可以任意取,里面的装饰器名字也不能修改,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/usr/bin/env python
    #coding:utf-8
    from django import template
    from django.utils.safestring import mark_safe
       
    register = template.Library()
       
    @register.simple_tag
    def my_simple_time(v1,v2,v3):
        return  v1 + v2 + v3
       
    @register.simple_tag
    def my_input(id,arg):
        result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
        return mark_safe(result)

    c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名,注意是在文件顶部,但是如果存在extend引入母版的时候,必须放在extend下面,而不是顶部了,

    1
    {% load xx %}

    d、使用simple_tag,里面的参数空格之间一定要有,但是空多少是么有关系的,

    1
    2
    {% my_simple_time 1 2 %}
    {% my_input 'id_username' 'hide'%}

    e、在settings中配置当前app,不然django无法找到自定义的simple_tag  

    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01',
    )

     

    4、自定义filter

    其他操作和simple_tag一样,只是装饰器变成了filter;

    后台书写格式:

    @register.filter
    def ceshi(v1,v2,v3):
        return  v1 + v2 +v3
     
    html获取数据书写格式:
    {{% 'v1'|ceshi:v2,v3' %}}

    filter优点:应用场景filter可以放到if后面作为条件判断

    {{% if 'malioya'|ceshi:'LS,YH' %}}
    {{% endif %}}

    缺点:只能传两个参数,如果要传多个参数,后面的参数必须都写在""里面,用,隔开,而且也可以传int类型,但是后台接受或者运算的时候必须int(),不能出现空格符号;

    知识点总结:

    更多见文档:https://docs.djangoproject.com/en/1.10/ref/templates/language/

    逆风的方向最适合飞翔,我不怕千万人阻挡,只怕自己投降。
  • 相关阅读:
    SQL进阶-索引设置&sql优化
    SQL进阶-去重
    SQL进阶-隐式类型转换
    SQL进阶-行转列&列转行
    用Spring实现文件上传(CommonsMultipartFile)!
    在Maven父项目下创建子项目
    Maven下把父项目下的子项目导出到myeclipse中
    oracle数据库的导入导出命令
    配置环境变量
    Nginx反向代理的配置
  • 原文地址:https://www.cnblogs.com/daemon-czk/p/9812059.html
Copyright © 2011-2022 走看看