Django 如何创建首页 Index Page?

文章导读
Previous Quiz Next 使用 startproject 命令 创建一个新的 Django 项目时,URL http://localhost:8000/ 会显示一个 默认首页。这表明 Django 安装成功。
📋 目录
  1. 一个带有多个 app 的 Django 主页
A A

Django - 首页



Previous
Quiz
Next

使用 startproject 命令 创建一个新的 Django 项目时,URL http://localhost:8000/ 会显示一个 默认首页。这表明 Django 安装成功。

使用以下命令创建一个项目 −

django-admin startproject myproject

现在你的项目已创建并配置完成,确保它能正常运行 −

python manage.py runserver

运行上述命令后,你会在屏幕上看到类似以下内容 −

Validating models...

0 errors found
March 09, 2022 - 12:24:26
Django version 4.0, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.Quit the server with CONTROL-C.

开发服务器正在 http://127.0.0.1:8000/ 运行。在浏览器中打开该链接。

Django Index Page 1

在主 “myproject” 文件夹中,使用 manage.py 命令 −

python manage.py startapp myapp

你刚刚创建了 myapp 应用。Django 还会创建一个带有应用结构的 “myapp” 文件夹 −

myapp/
   __init__.py
   admin.py
   models.py
   tests.py
   views.py
  • __init__.py − 只是为了让 Python 将此文件夹视为一个 package。
  • admin.py − 此文件帮助你在 admin 界面中修改应用。
  • models.py − 这是存储所有应用 models 的地方。
  • tests.py − 这是你的 unit tests 所在的地方。
  • views.py − 这是你的应用 views 所在的地方。

更新项目 settings.py 文件中的 INSTALLED_APPS 列表(添加你的应用名称)−

INSTALLED_APPS = [
   'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
   'myapp',]

我们将在 myapp 中创建一个简单的 view 来显示 “欢迎来到我的应用!

打开 “myapp\views.py” 并添加以下 view 函数 −

from django.shortcuts import render

# 在这里创建你的 views。

def index(request):
   # 其他 view 代码
   return render(request, index.html', {})

在这个 view 中,我们使用 HttpResponse 来渲染 HTML 页面。要将此 view 显示为一个页面,我们只需将其映射到一个 URL。

将以下 Python 脚本保存为 myapp/urls.py

from django.urls import path
from . import views

urlpatterns = [
   path('', views.index, name='index'),
]

下一步是将根 URLconf 指向 myapp.urls 模块。

myproject/urls.py 中,添加 django.urls.include 的 import,并在 urlpatterns 列表中插入一个 include(),如下所示 −

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
   path('', include('myapp.urls')),
   path('admin/', admin.site.urls),
]

现在运行 Django 开发服务器 −

python manage.py runserver

访问以下 URL 以 验证 index view 是否已渲染 −

http://localhost:8000/

你应该能看到首页的输出。

一个带有多个 app 的 Django 主页

然而,一个 Django 项目可能包含多个 app。因此,项目主页应该包含各个 app 主页的链接。

让我们在当前 Django 项目中创建两个 app −

python manage.py startapp customers

以及,

python manage.py startapp products

重写项目的主 index 页面,如下所示 −

<!Doctype html>
<html>
<body>
   <!--header-->
   <div style="height:10%;">
      <h2 align="center">My Web Application</h2>
      <hr>
   </div>
   <div style="width:100%;">
      <!side bar-->
      <div style="width:20%; float:left; border-right-style:groove">
         <ul>
            <b>
               <li><a href="admin/">Admin</a></li>
               <li><a href="customers/">Customers</a></li>
               <li><a href="Products/">Products</a></li>
            </b>
         </ul>
      </div>
      <!--contents-->
      <div style="margin-left:21%;">
         <p>
            <h2 align="center">Main Index Page</h2>
         </p>
      </div>
   </div>
   <br><br><br>
   <!--footer-->
   <hr>
   <div>
      <h4 align="right">All rights reserved</h4>
   </div>
</body>
</html>

customer app 的 index 页面应该保存在 templates 目录中。它由 customers/views.py 文件中的 view 渲染 −

from django.shortcuts import render

# 在这里创建你的 views。
def index(request):
   return render(request, "customerindex.html", {})

类似地,为 products app 创建 index 页面,并在其对应的 "products/views.py" 文件中定义映射的 view −

from django.shortcuts import render

# 在这里创建你的 views。
def index(request):
   return render(request, "productindex.html", {})

你还需要为每个 app 定义 urlpatterns 列表,如下所示 −

from django.urls import path
from . import views

urlpatterns = [
   path("", views.index, name="customer-index"),
]

类似地,为 products app 执行相同的操作 −

from django.urls import path
from . import views

urlpatterns = [
   path("", views.index, name="product-index"),
]

更新 myproject/urls.py 文件的 URLCONF −

from django.contrib import admin
from django.urls import path, include
from . import views

urlpatterns = [
   path('admin/', admin.site.urls),
   path('products/', include("products.urls")),
   path('customers/', include("customers.urls")),
   path('', views.index, name='index'),
]

运行 Django 服务器并访问 Django 项目的根 URL (http://localhost:8000/) −

Django Index Page 2