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
3
%
}
{
%
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/