0%

Mako模板创建流程

Mako模板创建流程:

官方文档地址 : https://docs.makotemplates.org/en/latest/

1.安装Django包:

# 安装django项目

pip3 install virtualenv # 安装virtualenv
python3 -m venv django_venv # 创建venv虚拟环境
source ./django_venv/bin/activate # 进入虚拟环境

# 下载django
pip3 install django # 直接安装
pip3 install django==2.2 -i https://pypi.douban.com/simple # 指定安装版本 和安装源

# 创建工程
django-admin startproject mysite # 创建一个名叫mysite的django工程
python manage.py startapp app # 创建一个名叫app的子应用

# 运行命令
python3 manage.py runserver 0.0.0.0:8000 # 指定运行到 8000 端口

2.配置settings:

# pip install mako    在虚拟环境中安装mako 包
ALLOWED_HOSTS = ["*"] # 允许所有ip访问

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app', # 以上是默认系统生成, 此处添加子应用名称,在这里添加了才可以使用
]

TEMPLATES = [ # temolates 模板配置

{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 自动生成修改
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]


# 固定写法
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_I10N = True
USE_TZ = True

STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]

3.配置主路由urls内容:

from django.contrib import admin
from django.urls import path, include # 导入include包

urlpatterns = [
path('admin/', admin.site.urls), # 固定写法 系统自动生成
path('', include('app.urls')) # 添加子路由
]

4.配置子路由urls内容(mako模板版本):

from django.urls import path
from .views import mako # 导入mako包

urlpatterns = [
path('', mako.as_view()) # 指向mako模板
]

5.创建mako模板py(app > base_render.py)文件:

from mako.lookup import TemplateLookup
from django.template import RequestContext
from django.conf import settings
from django.template.context import Context
from django.http import HttpResponse

def render_to_response(request, template, data=None):
context_instance = RequestContext(request) # 实例化方法
path = settings.TEMPLATES[0]['DIRS'][0] # 去settings中取 template路径
lookup = TemplateLookup( # mako包中的方法 实例化 并指定输入 输出 编码为 "utf-8"
directories=[path], # 默认的模板路径 替换成mako路径
output_encoding='utf-8',
input_encoding='utf-8',
)

mako_template = lookup.get_template(template) # lookup下的方法get_template 传入主函数导入进来的 template

if not data: # 判断传过来的data是否有值 如果没有值 就给一个默认的空字典
data = {}
if context_instance:
context_instance.update(data)
else:
context_instance = Context(data)
result = {}
for d in context_instance:
result.update(d)
result['csrf_token'] = ''.format(request.META.get('CSRF_COOKIE', '')) # 固定写法 csrf_token 验证
return HttpResponse(mako_template.render(**result)) # 返回HttpResponse mako_template下的render方法 因为result 是字典 所有需要加两个*
# return HttpResponse(content, content_type='text/csv') # 可以指定 content_type类型

6.配置views.py:

from .base_render import render_to_response
from django.views.generic import View
# Create your views here.
from django.shortcuts import render
from django.http import HttpResponse
import requests


class mako(View):
def get(self, request):
data = {'name': 'coocoo', 'age': 20}
return render_to_response(request, 'index.html', data=data)

7.创建 templates > index.html:

//该内容是mako模板下的html




Title


{name}{age}
<%!
from django.conf import settings
import requests
res_a = requests.get('https://www.baidu.com')
res_a.encoding = 'utf-8'
%>
{# {settings.TEMPLATES[0]['DIRS'][0]}#}{res_a.text}

8.Mako基本语法

${name}   # 拿取变量 name    方式为 ${}
<%! import requests %> # 执行python代码 代码内容用 <%! 开始 %>结尾