ChuannBlog

Django–模板(templates)

def current_time(req):
    # ================================原始的视图函数
    # import datetime
    # now=datetime.datetime.now()
    # html="<html><body>现在时刻:<h1>%s.</h1></body></html>" %now


    # ================================django模板修改的视图函数
    # from django.template import Template,Context
    # now=datetime.datetime.now()
    # t=Template('<html><body>现在时刻是:<h1>{{current_date}}</h1></body></html>')
    # #t=get_template('current_datetime.html')
    # c=Context({'current_date':str(now)})
    # html=t.render(c)
    #
    # return HttpResponse(html)


    # 另一种写法(推荐)
    import datetime
    now=datetime.datetime.now()
    return render(req, 'current_datetime.html', {'current_date':str(now)[:19]})

变量

格式:{{ 变量名 }}

过滤器filter

类似内置函数的功能

标签

标签看起来像是这样的: {% tag %}。标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中。
一些标签需要开始和结束标签 (例如{% tag %} …标签 内容 … {% endtag %})。

自定义标签和过滤器

  1. 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.
  2. 在app中创建templatetags模块(模块名只能是templatetags)
  3. 创建任意 .py 文件,如:my_tags.py

     from django import template
     from django.utils.safestring import mark_safe
    	 
     register = template.Library()   #register的名字是固定的,不可改变
    	 
    	 
     @register.filter
     def filter_multi(v1,v2):
         return  v1 * v2
    	
     @register.simple_tag
     def simple_tag_multi(v1,v2):
         return  v1 * v2
    	
     @register.simple_tag
     def my_input(id,arg):
         result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
         return mark_safe(result)
    
  4. 在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py
    • {% load my_tags %} 
  5. 使用simple_tag和filter(如何调用)

     -------------------------------.html
     {% load xxx %}  
    	      
     # num=12
     {{ num|filter_multi:2 }} #24
    	 
     {{ num|filter_multi:"[22,333,4444]" }}
    	 
     {% simple_tag_multi 2 5 %}  参数不限,但不能放在if for语句中
     {% simple_tag_multi num 5 %}
    
       - 注意:filter可以用在if等语句后,simple_tag不可以
    

模板继承

模板继承将模板分为两种

练习文件