Django 学习备忘录 – urlpatterns 和 path 函数

首先

这是关于Django的我的个人学习笔记。
为了能够回顾在ChatGPT4中查询的内容和额外查询的内容,我将其总结为一篇文章。
由于没有进行信息核实,如果有任何错误,请指正。

urlpatterns的作用是什么?

urlpatterns是Django框架中的重要组件,定义了URL和视图之间的映射关系。这使得Django能够将收到的HTTP请求(特别是URL)路由到适当的视图函数或视图类。

具体而言,urlpatterns是一个在urls.py配置文件中定义的Python列表,其中每个元素都是由path()函数或re_path()函数生成的URL模式。这些函数的作用是将特定的URL模式与视图关联起来。

有关urlpatterns和path函数的写法方式

urlpatterns是一个Python列表,其中每个元素都是由path()函数或re_path()函数生成的URL模式。

path()函数接受三个参数:

ルート(route): URLのパターンを文字列で指定します。このパターンはビューが呼び出されるべきURLを定義します。

ビュー(view): 指定されたURLパターンがマッチしたときに呼び出されるビュー関数またはクラスベースビューを指定します。

名前(name、オプション): URLパターンに名前を付けることができます。これにより、テンプレートやビュー内からこのURLパターンを参照することが可能になります。

例如,可以通过以下方式定义urlpatterns:

from django.urls import path

from . import views

urlpatterns = [
    #path('root', view, name='name')
    path('', views.home, name='home'),
    path('contact/', views.contact, name='contact'),
    path('about/', views.about, name='about'),
]

在path()函数的根目录下,只需要填写域名之后的部分。
在这个例子中,按照顺序分别将请求映射到以下页面的视图:
‘http://yourwebsite.com/’
‘http://yourwebsite.com/contact/’
‘http://yourwebsite.com/about/’

除了path()函数外,您还可以使用re_path()函数来定义URL模式。re_path()函数可以使用正则表达式来定义更复杂的URL模式。

另外,您还可以使用include()函数来从其他urls.py模块中包含URL模式。这对于大型项目或使用多个Django应用程序尤其有用。

from django.urls import include, path

urlpatterns = [
    path('posts/', include('posts.urls')),
]
from django.urls import path

from . import views

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

在上述情况下,URL”posts/”会映射到posts.urls模块中的URL模式。具体来说,当请求”posts/”时,它会映射到posts.urls模块中的空字符串。

在posts.urls模块中,由于“”(空字符串)被映射到views.index视图,所以当请求post/的URL时,将调用views.index视图。

因此,通过这个设置,’posts/’URL映射到views.index视图,并执行在views.py中定义的index函数。

from django.shortcuts import render

def index(request):
    return render(request, 'posts/index.html')

views.py的index函数会渲染(转换为HTML)并返回posts目录中的index.py。
此模板(现在是posts/index.html的例子)应位于posts/templates/posts/目录中。

这是因为Django的模板搜索算法会搜索应用程序的templates/子目录内。
请将“posts”替换为每个应用程序的名称。

因此,当收到对’http://yourwebsite.com/’的请求时,将返回’posts/index.html’。

上述是urlpatterns的基本使用方法。

广告
将在 10 秒后关闭
bannerAds