Django-模板

 模板

1、模版的执行

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

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)
View Code
from django import template
t = template.Template('My name is {{ name }}.')
c = template.Context({'name': 'Adrian'})
print t.render(c)
View Code
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
View Code
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)
View Code
return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))
View Code

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" %}     可通过extends继承母版
       {% block title %}{% endblock %}
  • 组件:{% include 'xxx.html' %}    
    • 值得注意的是,模板的渲染过程是把所有资源整合到一起后,一块渲染。
    • include所引用的xxx.html文件中也可以使用{{ xxx }},而这个xxx是原html文件中所的xxx
  • views.py
  • def index(request):
    
        dic_n = {'name':'哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈'}
        return render(request,'include_My.html',dic_n)
  • include_My.html
  • <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>app_1-Index</title>
    </head>
    <body>
        <h1>模板在下边</h1>
    
        {% include 'index.html' %}
        {% include 'index.html' %}
        {% include 'index.html' %}
    
    </body>
    </html>
  • index.html 组件
  • <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>app_1-Index</title>
    </head>
    <body>
        <h2>一个很漂亮的模板</h2>
        <div>
            {{ name }}
        </div>
    </body>
    </html>
  • 效果图:
  • 帮助方法:
    {{ item.event_start|date:"Y-m-d H:i:s"}}
    {{ bio|truncatewords:"30" }}
    {{ my_list|first|upper }}
    {{ name|lower }}

 自定义simple_tag、simple_filter

1、在app中创建templatetags文件夹

2、在其中创建任意 .py 文件,如:xx.py

xx.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'Fade Zhao'
from django import template
from django.utils.safestring import mark_safe

register = template.Library()   这· 句必须存在
@register.filter
def my_upper(v1, v2):
    v = v1+' vs '+v2
    return v.upper()

@register.filter
def my_flag(v1,v2):
    if v1>v2:
        return True
    else:
        return False

@register.simple_tag
def my_input(id, arg):
    result = "<input type='text' id='%s' value='%s' />" % (id, arg,)
    return mark_safe(result)

3、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名

{% load xx %}

4、使用simple_tag、simple_filter

{% my_input '1' 'XXXX'%}   使用simple_tag时:不限制参数个数,参数跟在函数名之后,用空格分割。却不能在HTML文件中的{%IF ... %}{%else%}中使用,只能在函数内执行
{%'1'|simple_add:'2'%} 使用filter时:参数最多两个,第二个参数紧跟[:]之后,中间不可以有空格、可以在 HTML文件中的{%IF ... %}{%else%}中使用

HTML文件:
{% load xx %}   -----------> 【3】
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>app_1-Index</title>
</head>
<body>
---------- filter -------------- <h1>{{ 'skt'|my_upper:'we' }}</h1>
---------- filter 判断 ---------- <h1> {% if 1|my_flag:2 %} <h1>v1大于v2<h1> {% else %} <h1>v1小于v2<h1> {% endif %} </h1>
  --------simple_tag---------- <h1> {% my_input '1' '🎉恭喜WE🎉' %} </h1>

</body> </html>

效果:

 

 

 

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

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
)

更多

 

 

 

 

 

posted @ 2017-09-23 10:23  LeeeetMe  阅读(192)  评论(0编辑  收藏  举报