0%

Jinja2模板创建流程

Jinja2模板创建流程:

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 jinja2    在虚拟环境中安装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.创建jinja2模板py(app > base_jinja2.py)文件:

from jinja2 import Environment
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse

def environment(**options):
env = Environment(**options)
env.globals.update({
'static': staticfiles_storage.url,
'url': reverse
})
return env

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(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基本语法:

变量被 {{ 和 }} 包围,如下所示:
My first name is {{ first_name }}. My last name is {{ last_name }}.


字典查找,属性查找和列表索引查找均以点符号实现:
{{ my_dict.key }}
{{ my_object.attribute }}
{{ my_list.0 }}


标签在渲染过程中提供了任意逻辑。
这个定义是故意含糊的。例如,标签可以输出内容,或用作控制结构如 “if” 语句和 “for” 循环,或从数据库中抓取内容,甚至可以访问其他模板标签。
标签被 {% 和 %} 包围,如下所示:

标签被 {% 和 %} 包围,如下所示:
{% csrf_token %}

大多数标签都接受参数:
{% cycle 'odd' 'even' %}

一些标签需要开始和结束标签:
{% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}

9、jinja2基本语法:

img