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 可以引入多个小插件,而且引入的插件也可以渲染,导入之前,小插件就已经渲染好了;

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/

猜你喜欢

转载自www.cnblogs.com/daemon-czk/p/9812059.html