django笔记3

10 篇文章 1 订阅
8 篇文章 0 订阅

创建主页

三个阶段:定义URL,编写视图和编写模板

1.映射URL

打开项目主文件夹learning_log中的文件urls.py

在这个针对整个项目的urls.py文件中,变量urlpatterns 包含项目中应用程序的URL。代码包含模块admin.site.urls ,该模块定义了可在管理网站中请求的所有URL。

主文件夹中的urls.py修改为:

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

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

默认的urls.py包含在文件夹learning_log中,现在需要在文件夹learning_logs中再创建一个urls.py文件。

为此,新建一个文件,使用文件名urls.py将其存储到文件夹learning_logs中,再在这个应用程序中的urls.py文件中输入如下代码:

"""定义learning_logs的URL模式。"""

from django.urls import path

from . import views

app_name = 'learning_logs'
urlpatterns = [
      # 主页
    path('', views.index, name='index'),
  ]

其中的句点让Python从当前urls.py模块所在的文件夹导入views.py。变量app_name 让Django能够将这个urls.py文件同项目内其他应用程序中的同名文件区分开来。

在这个模块中,变量urlpatterns 是一个列表,包含可在应用程序learning_logs 中请求的页面。

实际的URL模式是对函数path() 的调用,这个函数接受三个实参。

第一个实参是一个字符串,帮助Django正确地路由(route)请求。收到请求的URL后,Django力图将请求路由给一个视图。为此,它搜索所有的URL模式,找到与当前请求匹配的那个。Django忽略项目的基础URL(http://localhost:8000/),因此空字符串('' )与基础URL匹配。其他URL都与这个模式不匹配。如果请求的URL与任何既有的URL模式都不匹配,Django将返回一个错误页面。

第二个实参指定了要调用view.py中的哪个函数。请求的URL与前述正则表达式匹配时,Django将调用view.py中的函数index() 。

第三个实参将这个URL模式的名称指定为index ,让我们能够在代码的其他地方引用它。每当需要提供到这个主页的链接时,都将使用这个名称,而不编写URL。

 

2.编写视图

learning_logs中的文件views.py是执行命令python manage.py startapp 时自动生成的,将其修改为:

from django.shortcuts import render

def index(request):
    """学习笔记的主页。"""
    return render(request, 'learning_logs/index.html')

URL请求与刚才定义的模式匹配时,Django将在文件views.py中查找函数index() ,再将对象request 传递给这个视图函数。

这里不需要处理任何数据,因此这个函数只包含调用render() 的代码。这里向函数render() 提供了两个实参:对象request 以及一个可用于创建页面的模板。

 

3.创建页面的模板

在文件夹learning_logs中新建一个文件夹,并将其命名为templates。在文件夹templates中,再新建一个文件夹,并将其命名为learning_logs。这好像有点多余(在文件夹learning_logs中创建文件夹templates,又在这个文件夹中创建文件夹learning_logs),但是建立了Django能够明确解读的结构,即便项目很大、包含很多应用程序亦如此。在最里面的文件夹learning_logs中,新建一个文件,并将其命名为index.html(这个文件的路径为learning_log/learning_logs/templates/ learning_logs/index.html),再在其中编写如下代码:

index.html:

<p>Learning Log</p>

<p>Learning Log helps you keep track of your learning, for any topic you're
learning about.</p>

标签<p></p> 标识段落。标签<p> 指出段落的开头位置,而标签</p> 指出段落的结束位置。这里定义了两个段落:第一个充当标题,第二个阐述了用户可使用“学习笔记”来做什么。

现在,如果请求这个项目的基础URL http://localhost:8000/,将看到刚才创建的页面,而不是默认的Django页面。Django接受请求的URL,发现该URL与模式'' 匹配,因此调用函数views.index() 。这将使用index.html包含的模板来渲染页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ddxn417

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值