【Django04】模板
在之前的project中都是通过django.HttpResponse将内容显示到网页上,还可以通过使用渲染模板的方法来显示内容。
创建project和app
G:\Anaconda3\Scripts>python django-admin.py startproject test_model
G:\Anaconda3\Scripts>cd test_model
G:\Anaconda3\Scripts\test_model>python manage.py startapp test_app
修改settings.py INSTALLED_APPS
#test_mpdel\settings.py
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘test_app’,
]
添加views.py 首页视图
#test_app\views.py
from django.shortcuts import render
def home(request):
return render(request,'home.html')
添加templates文件夹和home.html
目录结构如下:
修改home.html
<!DOCTYPE html>
<html>
<head>
<title>****</title>
<a href = 'https://www.****.net/'>****-专业IT社区</a>
<br>
<br>
</head>
<body>
点击跳转****
</body>
</html>
#注意保存时需要将html以utf-8的编码形式保存
将视图函数对应到网址
#test_app\urls.py
from django.contrib import admin
from django.urls import path
from test_app import views as app_views
urlpatterns = [
path('',app_views.home,name = 'home'),
path('admin/', admin.site.urls),
]
创建数据库表
G:\Anaconda3\Scripts\test_model>python manage.py migrate
运行开发服务器
G:\Anaconda3\Scripts\test_model>python manage.py runserver
运行结果如下:
模板补充知识:
网站模板的设计,网站有一些通用的部分,比如 导航,底部,访问统计代码等。
nav.html bottom.html tongji.html
通过base.html来包含这些通用文件
#base.html
<!DOCTYPE html>
<html>
<head>
<title>{%block title%}默认标题{%end block%}-专业IT技术社区</title>
</head>
<body>
{% include 'nav.html' %}
{% block content %}
<div>这里是默认内容,多有继承自这个模板的,如果不覆盖就显示这里的默认内容</div>
{% endblock %}
{% include 'bottom.html' %}
{% include 'tongji.html' %}
</body>
</html>
如果需要,写足够多的 block 以便继承的模板可以重写该部分,include 是包含其它文件的内容,就是把一些网页共用的部分拿出来,重复利用,改动的时候也方便一些,还可以把广告代码放在一个单独的html中,改动也方便一些,在用到的地方include进去。其它的页面继承自 base.html 就好了,继承后的模板也可以在 block 块中 include 其它的模板文件。
#修改home.html,继承base.html
{% extends 'base.html' %}
{% block title %}欢迎光临首页{% endblock %}
{% block content %}
{% include 'ad.html' %}
这里是首页,欢迎光临
{% endblock %}
模板一般放在app下的templates中,Django会自动在这个文件夹中找,但如果每个app中都有一个index.html,当我们在views.py中使用的时候,直接写一个render(request,‘index.html’),Django不一定能找到index.html。
Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。这样设计有利当然也有弊,有利是的地方是一个app可以用另一个app的模板文件,弊是有可能会找错了。所以我们使用的时候在 templates 中建立一个 app 同名的文件夹,这样就好了。
这就需要把每个app中的 templates 文件夹中再建一个 app 的名称,仅和该app相关的模板放在 app/templates/app/ 目录下面