Django入门 ----路由配置

1. 流程

  • Django的项目文件夹和每个应用(app)目录下都有urls.py文件,它们构成了Django的路由配置系统。服务器收到用户请求后,会根据用户请求的url地址和urls.py里配置的url-视图映射关系,去调用执行相应的视图函数或视图类,最后由视图返回数据给客户端

2. path和re_path方法

  • path方法:采用双尖括号<变量类型:变量名>或<变量名>传递,例如int:id, slug:slug或。

  • re_path方法: 采用命名组(?P<变量名>正则表达式)的方式传递参数。

3. 示例

在使用path和re_path方法设计urls需注意:

  • url中的参数名要用尖括号,而不是圆括号
  • path匹配模式的最开头不需要添加斜杠 /,但建议以斜杠结尾
  • re_path模式不一定总是以 $ 结尾,有时不能加。比如下例中把blog.urls通过re_path加入到项目urls中时就不能以$结尾,因为这里的blog/并不是完整的url,只是一个开头而已
# 示例1,PATH
from django.urls import path
from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

# 示例2:RE_PATH,与上例等同
from django.urls import path, re_path
from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]

# 示例3
urlpatterns = [
    re_path(r'^blog/', include('blog.urls')),
    ...
]

# 示例4
from django.urls import path, re_path
from . import views

# app_name = 'blog' # 命名空间,后面会用到。
urlpatterns = [
    path('blog/articles/', views.article_list, name = 'article_list'),
    path('blog/articles/create/', views.article_create, name = 'article_create'),
    path('blog/articles/<int:id>/', views.article_detail, name = 'article_detail'),
    path('blog/articles/<int:id>/update/', views.article_update, name = 'article_update'),
    path('blog/articles/<int:id>/delete/', views.article_update, name = 'article_delete'),
]

# 示例5:字典传参,as_view()
# 1. 通过字典的形式传递额外的参数给视图, 而不用把这个参数写在链接里
# 2. url指向类视图必须使用 as_view() 方法
urlpatterns = [
    path('', views.ArticleList.as_view(), name='article_list', {'blog_id': 3}),
]

4. URL命名好处

  • 给每个URL取了个全局变量的名字,可以在Django的任意处(包括模板和视图函数中),特别方便显式引用

  • 模板中使用:

{% for article in articles %}
    <a href="{% url 'blog:article_detail' article.id %}">{{ article.title }}</a>
    # 通过url名字调用,方便并且动态生成链接
    
    <a href="blog/articles/{{ article.id }}">{{ article.title }}</a>
    # 硬编码url,不建议,万一全部要改动,工作量大
{% endfor %}
  • 视图中使用(借助 reverse 方法):
# 命名的URL一般只在模板里使用,不能直接在视图里使用
# reverse()方法在视图中可以对命名urls进行反向解析,生成动态链接

from django.urls import reverse

reverse('blog:article_detail', args=[id]) 
# 输出 :blog/articles/id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值