一、模板简介
- 为了更好的维护和展示页面数据,使用直接返回数据显然是呆板的,不够美观,不够灵活,所以要使用模板。
- 模板一般都放到项目根目录下的templates文件夹里。模板包含一些基础的HTML代码和一些特殊的语法,通过特殊的语法将数据动态的插入HTML页面中。
-
特殊的语法中有一些变量和标签。模板变量由视图函数生成的,然后通过上下文传递到模板里,由浏览器渲染出来。
二、模板使用方法
1)首先在同项目名目录下配置模板路径
在myblog/settings.py >> templates里的dirs
TEMPLATES = [ { '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', ], }, }, ]
2) 增加url规则
myblog/urls.py 》》 增加view.index
urlpatterns = [ ... path('', views.index), ]
3)不同数据类型的操作实例
a. 变量
blog/views.py
def index(request): sitename = '白灰博客' url = 'www.baihui.com' # 把两个变量封装到上下文里 context = { 'sitename': sitename, 'url': url, } # 把上下文传递到模板里
return render(request, 'index.html', context)
myblog根目录创建templates文件夹,下面再建一个index.html ,刷新页面查看首页渲染结果。变量需要用双大括号 {{ 变量名}} 来显示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>MyBlog</title> </head> <body> <h2>网站:{{ sitename }}</h2> <h2>域名:{{ url }}</h2> </body> </html>
b. 列表
blog/views.py
def index(request): sitename = '白灰博客' url = 'www.baihui.com' # 新加一个列表 list = [ '测试数据1', '测试数据2', '测试数据3', '测试数据4', '测试数据5', ] # 把两个变量封装到上下文里 context = { 'sitename': sitename, 'url': url, 'list2': list, } # 把上下文传递到模板里 return render(request, 'index.html', context)
注意上面的list2是content的key,模板引用的就是这个key list2,不是上面的变量名list。
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>MyBlog</title> </head> <body> <h2>网站:{{ sitename }}</h2> <h2>域名:{{ url }}</h2> {#新加代码#} <div> <ul> <h4>测试数据列表:</h4> {% for list in list2 %} <li>{{ list }}</li> {% endfor %} </ul> </div> </body> </html>
c. 字典
def index(request): sitename = '白灰博客' url = 'www.baihui.com' list = [ '测试数据1', '测试数据2', '测试数据3', '测试数据4', '测试数据5', ] myinfo = { 'name': 'baihui', 'addr': 'beijing', 'age': 33, 'sex': 'm', 'as name': 'robin', } context = { 'sitename': sitename, 'url': url, 'list2': list, 'info': myinfo, } # 把上下文传递到模板里 return render(request, 'index.html', context)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>MyBlog</title> </head> <body> <h2>网站:{{ sitename }}</h2> <h2>域名:{{ url }}</h2> {#新加代码#} <div> <ul> <h4>测试数据列表:</h4> {% for list in list2 %} <li>{{ list }}</li> {% endfor %} </ul> </div> <div> <ul> <h3>我的个人信息</h3> {% for k,v in info.items %} <li>{{k}} : {{v}}</li> {% endfor %} </ul> </div> </body> </
最终结果如下