栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django——jinja2配置与使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django——jinja2配置与使用

一、准备

1、首先创建一个新的项目django-admin startproject jinja
2、下载一下jinja的依赖:pip install jinja2
3、进入jinja文件夹,新建一个app python manage.py startapp app

二、环境创建

1、在app目录下创建一个jinja的基础环境,新建一个文件:base_jinja2.py
写入如下代码:

#coding:utf-8

from jinja2 import Environment  # jinja2的虚拟环境
from django.contrib.staticfiles.storage import staticfiles_storage  # django的一些依赖
from django.urls import reverse  # urls需要和jinja进行一些配置


def environment(**options):
    env = Environment(**options)  # 把一些配置文件添加进去
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse
    })
    return env

一个基础模板就创建好了。

然后我们需要将其配置进去,进入到settings,找到TEMPLATES,可以看到这里是Django的templates模板,现在我们需要将其换掉。

换成'BACKEND': 'django.template.backends.jinja2.Jinja2',
位置也改一下'DIRS': [os.path.join(base_DIR, 'templates')],
要在项目中也创建一下templates文件夹,顺便再建个static文件夹。

然后在TEMPLATEA的options中把虚拟环境也加上:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        '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',
            ],
            'environment': 'app.base_jinja2.environment'
        },
    },
]

加上options中’environment’那句就可以了。
app中的base_jinja2中的environment函数。

再顺便把静态文件也配置一下STATICFILES_DIRS = (os.path.join(base_DIR, 'static'),),不要忘记这是一个元组哦~

还有app也要注册哦!

三、效果

在templates文件夹下建一个text.html。
然后,view中定义一个简单的函数:

from django.shortcuts import render

# Create your views here.


def test(request):
    return render(request, 'text.html')

然后在根目录的urls中配置一下

from django.contrib import admin
from django.urls import path, include
from app.views import test

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', test)
]

在html中随便写一点东西,启动一下试试

启动OK的。

四、使用

views中定义个参数

def test(request):

    data = {'name': 'cong', 'age': 18}

    return render(request, 'test.html', data)

HTML中:


这个title是jinja中的函数,首字母大写

确实大写了。

在templates中新建一个base.html,把之前的base复制过来。
jinja里也可以用extends、block这些。和django模板用法差不多。

{% extends 'base.html' %}
{% block content %}

{{name|title}},{{age}}

{% endblock %}
五、区别

现在app下建一个filter文件,不过filter是Python的一个保留函数,所以使用时会出问题,还是改名成myfilter。
myfilter中定义个自定义过滤器:

def test(value, args):
    return value * args

然后要在base_jinja2中配置一下:

from .myfilter import test


def environment(**options):
    env = Environment(**options)  # 把一些配置文件添加进去
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse
    })
    env.filters['test'] = test
    return env

把myfilter中的test函数导入进来,然后environment函数中加入env.filter['test'] = test
这里出现了两个小问题:1、from .myfilter import testmyfilter是在当前文件夹下的,导入时要加个 .
2、env. 后面是filters,不要少了s

接下来,注意:jinja和django模板的过滤器传参是不同的,jinja使用()传参

{{name|title}},{{age|test(5)}}

使用一下这个自定义过滤器,将age的value乘以5。

六、静态文件如何导入

在static文件夹下再定义一个test.css,再写个背景颜色吧。

* {
    background-color: green;
}

然后在index.html中导入css

{% extends 'base.html' %}

{% block css_style %}



{% endblock %}

这样就导入好了。django中还要load static,jinja就不用了,直接写在link 的 href中就好。

就变成绿色了。

所以,jinja是不能使用load来导入的,如果load还会报错。js文件也是一样的,写响应的static下的文件就可以了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487890.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号