上篇中我们使用超级管理员权限创建了数据,本片我们接着将自定义的网页展示在主页上
1. 映射URL
用户通过在浏览器输入URL来请求网页,其中主页的URL最重要,当前基础URL(http://127.0.0.1:8000/)返回的是默认的Django网站,只是让我们知道正确的建立了项目,并不是我们自己的主页。
打开项目主文件夹(文件夹中包含ashi.py,settings.py,urls.py, wsgi.py,后面用文件夹1代指),打开其中的urls.py文件,修改为以下内容
1 """pizzeria URL Configuration 2 3 The `urlpatterns` list routes URLs to views. For more information please see: 4 https://docs.djangoproject.com/en/3.1/topics/http/urls/ 5 Examples: 6 Function views 7 1. Add an import: from my_app import views 8 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 Class-based views 10 1. Add an import: from other_app.views import Home 11 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 Including another URLconf 13 1. Import the include() function: from django.urls import include, path 14 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 """ 16 from django.contrib import admin 17 from django.urls import path 18 from django.conf.urls import include, url 19 20 urlpatterns = [ 21 path('admin/', admin.site.urls), 22 path('', include('pizzas.urls')), 23 ]
其中最重要的是第21,22行代码,urlpatterns中包含了本项目中请求的所有URL,目前有admin 和 默认主页面
此时我们还需要在应用程序所在文件夹中(其中包含models.py、 admin.py和views.py,后面用文件夹2代指 )创建文件urls.py
1 """定义pizzas的URL模式""" 2 3 from django.conf.urls import url # 将URL映射到视图 4 from django.urls import path 5 from . import views # 从当前urls.py所在的文件夹中导入views 6 7 urlpatterns = [ 8 # 主页 9 path('', views.index, name='index'), # 第二个实参制定了要调用的视图函数,第三个实参将URL模式名称指定为index,让我们能够在代码的其他地方使用它 10 ]
2. 编写视图
视图函数接收请求中的信息,准备好生成网页所需要的数据,再将这些数据发送给浏览器
应用程序所在文件夹中的views.py是执行命中python manage.py startapp时自动生成的,将其修改为以下内容
1 from django.shortcuts import render 2 3 # Create your views here. 4 5 6 def index(request): 7 """披萨网站的主页""" 8 return render(request, 'pizzas/index.html')
3. 编写模板
模板指定了网页是什么样的, 而每当网页被请求时, Django将填入相关的数据。
模板让你能够访问视图提供的任何数据 。
首先按照这个路径创建一个文件:
文件夹2 enplates文件夹2名index.html
这样做的目的是建立了Django能够明确解读的结构,在项目很大包含许多应用程序时更加明确。
<p>Welcome to my PIZAA shop!</p> <p>Here you can get all kinds of pizzas, and you can also see how to make pizza.</p>
此时再重新请求项目的基础URL时,我们将看到网页展示的是我们所创建的index.html的内容
中间遇到的报错:
TypeError: view must be a callable or a list/tuple in the case of include().
原代码
urlpatterns = [ path('admin/', admin.site.urls), path('', 'pizzas.urls', namespace='pizzas'), ]
解决方法:
urlpatterns = [ path('admin/', admin.site.urls), path('', include('pizzas.urls')), ]
如果要用namespace= 'pizzas',需要在文件夹2的urls.py中添加:
app_name = 'pizzas'