0、说明
项目demo地址:https://github.com/qq20004604/Python3_Django_Demo
版本:
django版本:2.2.1
python版本:3.7
1、安装
pip3 install django
初始化:
直接用 pycharm 新建 django 项目。
或者输入命令行:
django-admin startproject [项目名]
会创建文件夹,并且文件夹内部有一个 文件夹(名字是项目名)。
例如:
django-admin startproject
会在当前目录下创建一个 blogproject
文件夹,进入该文件夹后,还会有一个 blogproject
文件夹,这个里面有多个 py 文件,例如 urls.py
2、创建新应用
作用:
同一个django项目下,可以有多个应用,互相之间独立,方便管理。
创建:
python manage.py startapp [项目名]
效果:
- 会在根目录(manage.py)下创建一个文件夹,名字等于
[项目名]
; - 此时还需要引入到项目中;
引入:
假如新建的项目名是:homepage
,初始化的django项目名是 demo
打开 /demo/urls.py
文件,添加内容,结果应该如下:
from django.contrib import admin
from django.urls import path
# 引入项目
from homepage import views as homepage_views
# 这里配置 url
urlpatterns = [
path('admin/', admin.site.urls),
path('', homepage_views.index),
]
效果是 打开 /
路径,显示 homepage/views.py
里面设置的内容。
此时还需要编辑一下 homepage/views.py
,内容如下:
def index(request):
return HttpResponse('Home Page')
下来启动项目进行验证。
看到这里,我默认你已经明白了如何添加一个新的 url 和 view 了。
3、启动项目
项目根目录下运行
python manage.py runserver 127.0.0.1:8000
打开页面:http://127.0.0.1:8000/
,显示内容为:Home Page
注意,此时为【热更新项目】,即你修改后,不需要重启服务器,即时生效。
4、返回 html 文件
template 文件夹下新建 index.html
,内容:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>test</title>
</head>
<body>
Home Page Test
</body>
</html>
修改 homepage/views.py
如下:
from django.shortcuts import render, HttpResponse
# Create your views here.
def index(request):
return render(request, 'index.html')
继续访问 http://127.0.0.1:8000/
,显示内容:Home Page Test
注意,此时页面和之前最大不同不是显示的内容不同,而是一个返回的是字符串,另一方返回的是 html 文件(从chrome的network可得知)。
说明:
- 默认是只能取 templates 目录下的 html 文件;
- 如果要取其他目录下的 html 文件,通过相对路径来写,默认是不可行的;
- 推荐在 templates 目录下再建目录,比如
templates/homepage/xxx.html
这种形式来读取模板文件; - 优点是方便管理;
- 另一个方法是通过改
项目名/settings.py
的配置(缺点是复杂项目中,命中错误,后续和之前的文件名是一样);
修改settings.py`` 配置:
如下:
# 说明参考这个https://blog.csdn.net/xys430381_1/article/details/77943434
TEMPLATES = [
{
# BACKEND:模板引擎类的python路径,内置的模板引擎分别有'django.template.backends.django.DjangoTemplates'和'django.template.backends.jinja2.Jinja2'
# DTL和jinja2的区别:https://www.atjiang.com/2scoopsdjango1.8-15-django-templates-and-jinja2/
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# render 的时候,会依次找这些目录下的html文件,会使用list里先匹配到的那个目录里对应的文件
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'homepage/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',
],
},
},
]
两个方案对比:
- 共同点:都需要编辑 urls.py 文件;
- 修改settings方案:
- 方便管理和集成,直接复制粘贴应用的目录,引入和非引入只需要注释和取消注释即可;
- 但需要注意文件名冲突(即两个应用有模板的文件名相同);
- 推荐方案:
- 需要将 templates 文件拷贝到 templates 文件夹中;
修改settings方案的优化:
- 以上配置基础上,应用的模板文件名,添加应用名前缀,例如 homepage 应用的 index.html 修改文件名为 homepage_index.html;