1.自定义过滤器
新建一个django工程 名为lesson3
具体细节请见Django-01、初识Django和搭建Django helloworld
新建一个名为util的app
在util文件夹下新建一个文件夹templatetags 这个名称是固定的
在templatetags文件夹下新建一个空文件init.py
然后新建一个tags.py文件 往这个文件中写入
from django import template
register = template.Library()
@register.filter
def mycut(value, args):
return value.replace(args, "").lower()
更改settings.py文件 在INSTALLED_APPS列表中添加
'util'
在util文件夹下新建一个views.py文件 往文件中写入
from django.shortcuts import render
from django.views import View
# Create your views here.
class UtilHtml(View):
def get(self, request):
name = "HJ LOVES SSQ"
return render(request, 'Util.html', locals())
在lesson3文件夹下的template文件夹下新建一个util.html文件并添加以下代码
{% load tags %}
{#导入tags#}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Util</title>
</head>
<body>
{{ name|mycut:" " }}
</body>
</html>
在urls.py 中添加如下代码
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from util import views
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^util/$', views.UtilHtml.as_view())
]
2.自定义标签
在util.py中加入以下代码
@register.simple_tag
def curr_date(args):
return datetime.datetime.now().strftime(args)
在util.html中加入以下代码
{% curr_date "%Y-%m-%d" %}
3.自定义包含标签
新建一个menu.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>menu</title>
</head>
<body>
<br>
{% for i in menu %}
{{ i }}<br>
{% endfor %}
</body>
</html>
在tags.py文件里加入以下代码
@register.inclusion_tag("menu.html")
def my_menu():
menu = [1, 2, 3, 4, 5]
return {'menu': menu}
再在util.html 文件末尾添加
{% my_menu %}
4.模板加载静态文件
在项目添加一个静态文件夹,并添加需要添加的静态文件(一般名叫static)
配置静态文件settings
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
ps: 使用pycharm 创建完静态文件后,需要手动上传一次
在需要使用的html模版头部中添加导入
{% load static %}
使用
ps: 引入的路径是一个相对路径
5.附录
本文章代码如下
tags.py
import datetime
from django import template
register = template.Library()
@register.filter
def mycut(value, args):
return value.replace(args, "").lower()
@register.simple_tag
def curr_date(args):
return datetime.datetime.now().strftime(args)
@register.inclusion_tag("menu.html")
def my_menu():
menu = [1, 2, 3, 4, 5]
return {'menu': menu}
menu.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>menu</title>
</head>
<body>
<br>
{% for i in menu %}
{{ i }}<br>
{% endfor %}
</body>
</html>
views.py
from django.shortcuts import render
from django.views import View
# Create your views here.
class UtilHtml(View):
def get(self, request):
name = "HJ LOVES SSQ"
return render(request, 'Util.html', locals())
util.html
{% load tags %}
{#导入tags#}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Util</title>
</head>
<body>
{{ name|mycut:" " }}<br>
{% curr_date "%Y-%m-%d" %}
{% my_menu %}
</body>
</html>
urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from util import views
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^util/$', views.UtilHtml.as_view())
]