按照《Python编程:从入门到实践》这本书的项目三所编写的web应用程序
python+Django的web应用程序(三)Django入门
创建网页:学习笔记主页
使用Django创建网页分三步:
定义URL
编写视图
编写模板
就目前而言,先写一个简单的URL,让Web应用能够正常运行,之后再设计复杂的样式。
只需让主页显示标题和简单的概述
映射URL
用户通过URL来请求网页,目前,基础 URL(http://localhost:8000/)返回默认的Django网站,修改默认URL,将这个基础URL映射到“学习笔记”的主页。
打开项目文件夹learning_log中的文件urls.py,如下所示
打开
变量urlpatterns包含项目中的应用程序的URL。
模块admin.site.urls定义了可在管理网站中请求的所有URL。
为什么我的urls.py里的代码和书上的代码不一样?
那书上的代码八成不能用了,果断找度娘
机智如我
添加进包含learning_logs的URL如下:
path('', include('learning_logs.urls')),
然后就不出意外的出意外了
报错如下:
名字错误:名称“include”未定义 (NameError: name ‘include’ is not defined)
没有导入include模块就不能用,啊,这很合理。
解决办法:
导入include模块
from django.conf.urls import include
或者这样
其实人家提示的有,只是我没看到
运行下服务:
很好又报错,完全在意料之中,根本不慌。
看下错误原因:
模型找不到:没有名为“learning_logs.urls”的模块(ModuleNotFoundError: No module named ‘learning_logs.urls’)
找不到?这不用path包含进去了吗?
结果如下:
好吧,这个确实没有,不过这也说明了添加进去的path的确其作用了。
手动创建urls.py:
代码如下:
"""定义learning_logs的URL模式"""
from django.urls import path
from . import views
app_name = 'learning_logs'
urlpatterns = [
# 主页
path('', views.index, name='index'),
]
在 Django 2.0 中,应用程序的命名空间是通过应用程序urls.py的app_name中的变量定义的。
然后,嗯…直接来看报什么错吧
属性错误:模块 'learning_logs.views’视图没有属性“index”(AttributeError: module ‘learning_logs.views’ has no attribute ‘index’)
因为没有编写视图,所以views里面没有属性“index”,合理!
编写视图
视图函数接受请求中的信息,准备好生成网页所需的数据,再将这些数据发送给浏览器
learning_logs中的文件views.py是你执行命令python manage.py startapp时自动生成的
开始编写视图
代码如下:
from django.shortcuts import render
# Create your views here.
def index(request):
"""学习笔记的主页"""
return render(request, 'learning_logs/index.html')
URL请求与我们刚才定义的模式匹配时,Django将在文件views.py中查找函数index(),再将请求对象传递给这个视图函数。
index.html是接下来要编写的视图模板
编写模板
模板定义了网页的结构。当网页被请求时,Django将填入相关的数据。
在文件夹learning_logs中新建一个文件夹,并将其命名为templates。在文件夹templates中,再新建一个文件夹,并将其命名为learning_logs。(这么做可以将文件详细分类,看着麻烦,但对于维护和修改来说更方便)
在最里面的文件夹learning_logs中,新建一个文件,并将其命名为index.html,再在这个文件中编写如下代码:
<p>学习笔记</p>
<p>学习笔记可以帮助你跟踪你任何主题的学习。</p>
现在访问一下刚设置好的基础URL,看看能不能跳转到index.html
http://localhost:8000/
好了,第一个网页创建完毕。