Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。今天小编我就来拼个老命给你来介绍下第四项Django核心基础知识之模板Template的设计吧, 并重点介绍下Django模板过滤器与标签。想持续了解后续Django Web开发技术请订阅我的公众号【Python与Django大咖之路】。
什么是模板(Template)? Django的Template是如何工作的
Django的模板是静态的html文件,它只决定了一个页面的样式或外观。它需要视图View传递过来的变量(Variable)或内容对象(Context object)才能被渲染成一个完整的页面。这样做的好处是实现了样式与业务逻辑的分离,便于前端和后端Web开发人员各自完成自己的开发工作。
我们先来看一个新闻博客的例子。当用户访问/blog/article/2/的时候,URL路由器会调用视图views.py的article_detail方法。article_detail所做的就是提取id=2的文章对象,通过render方法,将它传递到模板文件/blog/article_detail.html。
# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('blog/article/<int:id>/', views.article_detail, name='article_detail'),
]
# blog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Article
def article_detail(request, id):
article = get_object_or_404(Article, pk=id)
return render(request, 'blog/article_detail.html', {"article": article})
下图是模板文件blog/article_detail.html的代码。在模板文件里我们可以通过双括号{ { article }} 显示变量或内容对象,还可以通过点号(.)用来直接访问变量的属性。
{% block content %}
{
{ article.title }}
{
{ article.pub_date }}
{
{ article.body }}
{% endblock %}
模板(Template)文件的正确位置
对于html模板文件,我们建议放在app/templates/app/文件夹里,而不是简单放在app/templates/里。看似我们多加了一层文件夹使问题复杂化了,但这样做实际上更安全。这与Django查找模板文件的方法有关。因为我们多加了一层app,这样Django只会查找app文件