8 - 9 template兩大功能 : simple_tag、模板繼承

template 兩大功能

一些基本語法

好比 if for jquery引入 修改時間格式 模板繼承html

咱們在生產中會發現寫的平臺頂部導航欄,和左側菜單欄都是相同的。這樣咱們能夠把它寫成模板,寫的時候回只寫主體部分,繼承菜單欄和導航欄,來省略大量代碼jquery

舉例

編輯login.htmldjango

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>demo01</title>
</head>
<body>
	<h1>{{obj.username.0}}</h1>
	{% for item in obj_li %}
		<div>
			{% if item.username == 'zzxx' %}
				<span>{{ item.username }}</span>
				<span>{{ item.password }}</span>
			{%endif %}

		</div>
	{% endfor %}

</body>
</html>

urlsapp

from django.contrib import admin
from django.conf.urls import url,include
from app1 import  views


urlpatterns = [
	url('admin/', admin.site.urls),
	url('login/', views.login),

views測試

def login(request):
	if request.method == 'GET':
			obj_li = models.U1serInfo.objects.all()
			for obj in obj_li :
				print('username :',obj.username)
				print('password :',obj.password)
	return render(request,'login.html',locals())

導入靜態文件

template中url

{% load staticfiles%}  ##django中導入靜態文件

<script src = "{% static 'test.js' %}"></script>  ##寫在title下面

在setting中增長spa

STATIC_URL = '/static/'
STATIC_DIRS = (
os.path.join(BASE_DIR,"static/")
)

==mark== 後面的東西有點亂,先pass。後面用到在回顧一下3d

html中的一些繼承,傳參,方法code

一些方法

{{ test }}
{{ test|cut ' '}}  ## 切片

<br>  ## 換行

{{ d }}
{{ d|date:'Y-m-d' }}  ## 時間格式

詳細介紹 http://www.cnblogs.com/onda/p/7380850.htmlorm

simple_tag

上面是一些Django自帶的方法;當咱們須要一些Django沒有的方法的時候,咱們就須要用到simple_tag這個功能

舉例

咱們要寫一個將時間戳轉換爲普通時間格式的方法

一、寫方法

方法能夠寫在任意APP下

必須建立包(含init文件)

包名必須是 templatetags

以後建立的py文件就能夠隨意取名

而後開始寫方法

from django.template import Library

register = Library()  ##對象名必須是register

@register.filter()  ##這其實就是個裝飾器
def filter_func(x,y):
	return x+y

@register.simple_tag
def simple_func(a,b,t):
	s = "{0}——{1}——{2} 2019-1-5".format(a,b,t)
	return s

二、 在配置文件中更改

將你寫的包所在在app名字(咱們的例子中,app名爲Django111)放在 INSTALLED_APPS 中

三、 在html中引用咱們寫的simple_tag方法

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>django111</title>
</head>
<body>

	<h3> {{ a }}</h3>
	<h3> {{ b }}</h3>
	<h3> {{ test }}</h3>
	{% load my_tag %}
	{{ a|filter_func:b }}
	<br>
	{% simple_func a b test %}

</body>
</html>

用多個參數請重寫simple_tag 方法

測試

urls

urlpatterns = [
	url (r'admin/', admin.site.urls),
	url('login/', views.login),
	url('temtest/', views.temtest),
]

views

def temtest(request):
	if request.method == 'GET':
			a = 1
			b = 2
			test = '1654646136543'
	return render(request, 'temtest.html', locals())

訪問 127.0.0.1:8000/temtest/

易錯點

建立的是package

包名必須取templatetags

app加入配置文件

模板繼承

base.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>django11</title>
</head>
<body>

<h1>  我是頂部菜單 </h1>

<div>
	{% block content %}

	{% endblock %}
</div>

</body>
</html>

子html

好比咱們剛纔寫的temtest.html,咱們用它來繼承base.html

{% extends 'base.html' %}
	{% block content %}
		<h3> {{ a }}</h3>
		<h3> {{ b }}</h3>
		<h3> {{ test }}</h3>
		{% load my_tag %}
		{{ a|filter_func:b }}
		<br>
		{% simple_func a b test %}
	{% endblock %}

訪問

相關文章
相關標籤/搜索