【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>CSDN</title>
<a href = 'https://www.csdn.net/'>CSDN-专业IT社区</a>
<br>
<br>
</head>
<body>
点击跳转CSDN
</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/ 目录下面

猜你喜欢

转载自blog.csdn.net/cs_xuhuan/article/details/82890609