您的位置:

Django路由详解

一、Django路由怎么写

Django路由的编写是在项目的urls.py文件中进行的,该文件中包含了整个项目的路由配置信息。路由的格式为:path(route, view, kwargs=None, name=None)。 其中route参数表示匹配的URL路径,view参数表示该路径下对应的视图函数,kwargs参数可选,是一个字典类型的参数,可以包含任意个关键字参数,作为视图函数的参数传递;name参数可选,用于给URL定义一个名称,以便在Django的其他地方使用,比如在模板中构造URL。

二、Django路由配置叫什么名字

Django路由配置文件通常被命名为urls.py,可以位于项目的根目录或者应用程序的子目录中。在应用程序的子目录中可以创建一个名为urls.py的文件来包含该应用程序的所有路由。

三、Django路由配置了但跳转不了

若Django路由配置了但跳转不了,常见的原因是没有在视图函数中返回HttpResponse或者render函数的调用。另外,一定要确保路径匹配正确,包含斜杠或者没有斜杠在Django路由匹配中是有区别的。

四、Django路由path

在Django 2.0之后,引入了path方法,替代了以前的re_path和url方法,具有更加简洁明了的特点。使用path方法可以直接匹配URL路径,不需要正则表达式。 示例代码:

from django.urls import path
from . import views

urlpatterns = [
    path('article//', views.article_year),
]

  

五、Django路由正则

Django路由使用正则表达式匹配URL,常用的正则表达式如下: \d 匹配任意数字 \w 匹配任意数字/字母/下划线 \+ 匹配左侧的字符出现一次或多次 * 匹配左侧的字符出现0次或多次 ? 匹配左侧的字符出现0次或1次 () 用来标记一个组的开始和结束位置 示例代码:

from django.urls import re_path
from . import views

urlpatterns = [
    re_path(r'^articles/(?P\d{4})/', views.article_year),
    re_path(r'^articles/(?P\w+)/', views.article_name),
]

六、Django路由配置

Django路由配置是指在urls.py文件中配置路由,以映射URL到视图函数。通常路由配置会组成一个列表(英文名称为urlpatterns),在Django的启动时就会被加载并使用。当请求到来时,Django会按照 urlpatterns 列表的顺序从上到下匹配 URL,使用第一个能够匹配的视图函数作为响应。 例如:

from django.urls import path
from . import views

urlpatterns = [
    path('article//', views.article_year),
    path('article/
   /', views.article_slug),
]

   
  

七、Django路由权限

Django路由权限指的是对路由设置权限,只有拥有相应权限的用户才能访问。举个例子,在路由中添加login_required装饰器可以让用户必须登录才能访问: 示例代码:

from django.urls import path
from django.contrib.auth.decorators import login_required
from . import views

app_name = 'blog'
urlpatterns = [
    path('', views.index, name='index'),
    path('/', login_required(views.ArticleDetailView.as_view()), name='detail'),
]

  

八、Django路由参数

Django路由参数指的是在URL中加入参数,用于调用视图函数或者完成其他操作。Django支持两种类型的参数:位置参数和关键字参数。位置参数使用?P 进行定义,关键字参数使用?P<name=value>进行定义,参数名称与参数值用=分开。 示例代码:

from django.urls import path
from . import views

app_name = 'blog'
urlpatterns = [
    path('search/', views.search, name='search'),
    path('article//', views.article_year),
    path('article/
   /', views.article_slug),
    path('login/', views.login, name='login'),
]

   
  

九、Django路由匹配原则

Django路由匹配原则遵循的是“先匹配长的一项”。如下所示,Django路由会优先匹配第2个路由,因为它的匹配规则比第1个路由匹配更长。

from django.urls import path
from . import views

urlpatterns = [
    path('article//', views.article_year),
    path('article/
   /', views.article_slug),
]

   
  

十、Django路由转换器

Django路由转换器是指变量,允许精细控制Django路由系统的匹配。转换器在路由中用一对<angle brackets>括起来,如:<int:year>、<slug:slug>。常用的转换器类型包括:str、int、slug、uuid、path和custom。如果需要自定义转换器可以通过继承Converter类来实现。

参考代码

from django.urls import path, re_path
from . import views

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

    path('search/', views.search, name='search'),
    path('tags/', views.TagListView.as_view(), name='tag_list'),
    
    path('article//', views.ArticleDetailView.as_view(), name='detail'),
    path('article/
   /edit/', views.ArticleUpdateView.as_view(), name='edit'),
    path('article/
    /delete/', views.ArticleDeleteView.as_view(), name='delete'),

    path('write/article/new/', views.ArticleCreateView.as_view(), name='create_article'),

    path('about/', views.about, name='about'),
    path('contact/', views.contact, name='contact'),

    re_path(r'^articles/(?P\d{4})/', views.article_year),
    re_path(r'^articles/(?P\w+)/', views.article_slug),
]