用Jinja2替换Django的模板语言
Django(72), 金珍(1)在这个例子中,我们将仔细看看Django的宽松耦合哲学的灵活性,通过更换其默认的模板语言jinja2.。Jinja2是Django提供的一个非常相似的模板语言,但提供了更灵活的附加功能如果在模板中语法,选择在模板内运行未定义的对象时引发错误(与Django的模板语言相比,这将始终默默地失败),和用于检索模板的更灵活的解决方案。 p>
让我们开始吧。 p>
首先,我们需要下载并安装Jinja2。 p>
sudoyey _install Jinja2.
然后确保它有效。 p>
进口jinja2.
创建Django项目和应用程序。 p>
django_admin.py startproject post_cuoupling.光盘loot_cuouping python manage.py startapp with_jinja
为项目创建一个模板文件夹,以及一个用于新应用程序的模板文件夹。 p>
mkdir模板mkdir with_jinja / templates mkdir with_jinja / templates / with_jinja
打开
lock_cuoupling / settings.py.py.
并更改设置已安装_apps.
和template_dirs.
。 p>已安装_apps.=('stole_coupling.with_jinja'那'django.contrib.auth'那'django.contrib.contenttypes'那'django.contrib.sessions'那'django.contrib.sites'那)进口OS.root_path.=OS.。小路。妄想(__文件__)template_dirs.=(OS.。小路。加入(root_path.那'模板'),OS.。小路。加入(root_path.那'with_jinja / templates'),)
打开
lootple_cuoupling / urls.py.
并将其内容更改为此: p>从django.conf.urls.defaults.进口*URLPatterns.=图案('loost_coupling'那(r'^ $'那'with_jinja.views.index'),)
现在我们只需要创建观点。首先,开放
with_jinja / views.py.
并添加这些导入: p>进口数学那随机的从django.http.进口httpresponse.从django.conf.进口设置从jinja2.进口filesystemloader.那环境
然后我们将编写一点便利方法来通过Jinja2处理渲染。 p>
template_dirs.=getattr.(设置那'template_dirs')default_mimetype.=gettattr.(设置那'default_content_type')env.=环境(装载机=filesystemloader.(template_dirs.)))
defrender_to_response.(文件名那语境={},mimetype.=default_mimetype.):模板=env.。get_template.(文件名)呈现=模板。使成为(**语境)返回httpresponse.(呈现那mimetype.=mimetype.)
然后,让我们创建一个简单的自定义测试,即我们的Jinja模板将用于帮助渲染其输出。 p>
defgryer_than_fifty.(X):返回X>50.env.。测试['gtf']=gryer_than_fifty.
现在让我们创造
指数
查看我们将使用的。 p>def指数(要求):N=㈡(数学。地面(100.*随机的。随机的()))返回render_to_response.('with_jinja / index.html',{'n':N})
正如您所看到的,它是一个非常简单的视野,仅仅将生成的数字传递给
render_to_response.
我们以前创建的功能。 p>接下来,我们需要创建我们的
index.html.
模板那个指数
视图正在尝试呈现。为此,首先我们将创建一个base.html.
模板在lock_cuoupling /模板
目录。所以,开放lock_coupling / templates / base.html
并将其添加到它中 p>松散耦合的django. title> head>{%堵塞内容%}{%终止%} body> html> 现在我们需要创造
lock_cuoupling / with_jinja / templates / with_jinja / index.html
模板。它将扩展我们的基础模板,非常简单: p>{%延伸'base.html'%}{%堵塞内容%}生成的数字是{{N}}。 p>{%如果N是GTF.%}这个数字肯定大于五十。 p>{%别的%}不幸的是,这个数字低于五十。 p>{%万一%}{%终止%}
现在,保存所有文件并运行项目。 p>
python manage.py runserver
现在导航到http://127.0.0.1:8000您将看到Django开发服务器Merrily呈现我们的Jinja2模板。 p>
由于Django的宽松耦合哲学,切换到使用Jinja2而不是默认的模板语言真的很无痛。正如本系列继续,我们会看看这不仅仅是一个怪胎的发生,而是在整个Django堆栈中发生。 p>