一、urlpatterns有什么用
urlpatterns是一个列表,用于将url与视图函数或类相关联。在Django中,我们编写的所有视图函数/类都需要通过urlpatterns来进行路由分发。
urlpatterns通常被定义在项目的urls.py文件中。例如:
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index, name='index'),
path('login/', views.login, name='login'),
]
在这个示例中,我们将’/index/’和’/login/’这两个URL路径与index()和login()视图函数相关联。当用户访问’/index/’时,Django会调用index()视图函数。
二、urlpatterns的值怎么设置
我们可以将urlpatterns看作一个列表,列表中的每一个元素都代表一个URL与视图函数/类的映射关系。
在Django中,我们通常使用path()函数或re_path()函数来设置urlpatterns的值。path()函数用于通用的URL匹配,而re_path()函数则可以使用正则表达式进行更加灵活的匹配。
具体使用如下:
from django.urls import path, re_path
from . import views
urlpatterns = [
path('index/', views.index, name='index'),
path('articles//', views.article_year),
re_path(r'^articles/(\d{4})/(0?[1-9]|1[012])/$', views.article_month),
]
在这个示例中,我们使用path()函数将’/index/’路径与index()视图函数相关联,同时使用了一个具有参数的视图函数(article_year())。
另外,我们还使用了re_path()函数来匹配形如’/articles/2019/05/’这样的路径,并与具有参数的视图函数(article_month())相关联。
三、urlpattern怎么匹配好
在Django中,URL匹配是按照顺序进行的。当用户发起请求时,Django系统按照urlpatterns中定义的顺序逐一检查每一个URLpattern,直到匹配到一个合适的URLpattern为止。
例如:
from django.urls import path
from . import views
urlpatterns = [
path('login/', views.login, name='login'),
path('login/forgot/', views.forgot, name='forgot'),
path('login/register/', views.register, name='register'),
]
在这个示例中,如果用户访问’/login/forgot/’路径,Django会去匹配urlpatterns中的第一个pattern,即’login/’。由于’login/’并不匹配,Django会继续匹配第二个pattern:’/login/forgot/’。此时成功匹配。
注意,urlpatterns中的值匹配时是按照从上到下的顺序进行的。因此,如果定义下面的urlpatterns:
from django.urls import path
from . import views
urlpatterns = [
path('users/', views.users, name='users'),
path('users/new/', views.new_user, name='new_user'),
path('users//', views.user_detail, name='user_detail'),
path('users//edit/', views.edit_user, name='edit_user'),
]
如果用户访问’users/3/edit/’,Django将会先匹配’users/’和’users/new/’。这两个pattern都不匹配,然后再匹配’users/<int:user_id>/’这个pattern。即使’users/<int:user_id>/’后面也定义了一个匹配’users/<int:user_id>/edit/’,也不会被执行。
四、patterns选取
下面是三个与url-pattern相关的patterns:
1、将URLpattern分离到单独的模块中
# urls.py
from django.urls import include, path
from . import views
urlpatterns = [
path('', views.index),
path('accounts/', include('django.contrib.auth.urls')),
path('blog/', include('blog.urls')),
# ...
]
在这个示例中,我们将账户应用的URLpattern放到了/accounts/路径中,并将’blog/’的URLpattern放到了blog应用中。这可以使urls.py文件更加整洁,也可以方便地管理多个不同的URLpattern。此外,使用include()函数还可以允许其他应用中的URLpattern在你的应用中被重复使用。
2、使用正则表达式进行URL匹配
# urls.py
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^search/(?P<query>\w+)/(?P<page>\d+)/$', views.search_results),
]
在这个示例中,我们使用了re_path()函数并使用正则表达式进行URL匹配。使用捕获组(?P<>),我们将查询(query)和页数(page)作为参数传递给搜索结果视图函数(search_results())。
3、设置URL名称
# urls.py
from django.urls import path
from myapp import views
urlpatterns = [
path('blog/', views.BlogListView.as_view(), name='blog'),
]
在这个示例中,我们为URLpattern指定了一个名称’blog’。通过指定URL名称,我们可以在其他地方引用该URL,例如模板中的链接。
原创文章,作者:QXPI,如若转载,请注明出处:https://www.506064.com/n/145677.html