• Django路由系统


    1. 基础路由

    1.1 单一路由
    1. url(r'^index$', views.index) 
    1.2 基于正则路由
    1. url(r'^index/(d+)', views.index), 
    1.3 额外参数路由
    1. url(r'^index/'), views.index, {'id': 3333
    2.  
    3. # views中 
    4. def index(request, id): 
    5. pass 
    1.4 示例代码
    1. from django.conf.urls import url 
    2. from . import views 
    3.  
    4. urlpatterns = [ 
    5. url(r'^articles/2003/$', views.special_case_2003), 
    6. url(r'^articles/([0-9]{4})/$', views.year_archive), 
    7. url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 
    8. url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), 
    9. ''' 
    10. 请求: 
    11. /articles/2005/03/ 请求将匹配列表中的第三个模式。Django 将调用函数views.month_archive(request, '2005', '03')。 
    12. /articles/2005/3/ 不匹配任何URL 模式,因为列表中的第三个模式要求月份应该是两个数字。 
    13. /articles/2003/ 将匹配列表中的第一个模式不是第二个,因为模式按顺序匹配,第一个会首先测试是否匹配。 
    14. /articles/2003 不匹配任何一个模式,因为每个模式要求URL 以一个反斜线结尾。 
    15. /articles/2003/03/03/ 将匹配最后一个模式。Django 将调用函数views.article_detail(request, '2003', '03', '03')。 
    16. ''' 
    1.5 注意
    • '^index$'^$表示匹配的开始与结尾
    • url(r'^edit/(w+).html$', views.edit) 伪静态 seo权限会更高
    • 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号
    • 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles
    • 每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的”(字符串中任何字符都不应该转义)

    2. 分组路由

    2.1 基于正则的分组路由

    命名正则表达式组的语法是(?Ppattern),其中name 是组的名称,pattern 是要匹配的模式
    捕获的值作为关键字参数而不是位置参数传递给视图函数

    1. url(r'^manage/(?P<name>w*)/(?P<id>d*)', views.manage), 
    2. ''' 
    3. 补充:如果使用分组路由,需全部使用分组路由,否则会出现前后取不到的情况 
    4. ''' 
    5. url(r'^test/(?P<fff>d+)/', views.test, name='t1'), 
    6. url(r'^test/(d+)/(?P<fff>d+)/', views.test, name='t1'), 
    2.2 示例代码
    1. from django.conf.urls import url 
    2. from . import views 
    3.  
    4. urlpatterns = [ 
    5. url(r'^articles/2003/$', views.special_case_2003), 
    6. url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), 
    7. url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), 
    8. url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail), 
    9.  
    10. ''' 
    11. 请求 
    12. /articles/2005/03/ 请求将调用views.month_archive(request, year='2005', month='03')函数,而不是views.month_archive(request, '2005', '03')。 
    13. /articles/2003/03/03/ 请求将调用函数views.article_detail(request, year='2003', month='03', day='03')。 
    14. ''' 

    3. 路由分发

    1. ''' 
    2. 请求: 
    3. /app01/index.html 
    4. 请求将匹配 urls.py中的'^app01/', 遇到路由分发'include('app01.urls')', 
    5. 请求将匹配 app01.urls.py 中的^index.html$', 调用 index 
    6. ''' 
    3.1 urls.py
    1. from django.conf.urls import include, url 
    2.  
    3. urlpatterns = [ 
    4. url(r'^app01/', include('app01.urls')), 
    3.2 app01.urls.py
    1. url(r'^index.html$', views.index), 

    4. 反向解析

    4.1 路由关系命名

    设置名称后,可以在不同的地方调用

    1. url(r'^index/(d*)', views.index1, name='h1'), 
    2. url(r'^index/(?P<hhh>d*)', views.index2, name='h2'), 
    4.2 视图函数中反向解析
    1. from django.urls import reverse 
    2.  
    3. def index1(request, *args): 
    4. ''' 
    5. 路由关系1 
    6. ''' 
    7. v = reverse('h1', args = (2012,)) # 注意args 后面加可迭代的元素 
    8. print(v) # index/2012 
    9. return HttpResponse('...'
    10.  
    11. def index2(request, *args, **kwargs): 
    12. ''' 
    13. 路由关系2 
    14. ''' 
    15. v = reverse('h2', kwargs = {'hhh': 2015}) # 注意args 后面加可迭代的元素 
    16. print(v) # index/2015 
    17. return HttpResponse('...'
    18.  
    19. ''' 
    20. 总结: 
    21. reverse 后不管是args还是kwargs 参数数值可改变 
    22. ''' 
    4.3 模板中反向解析
    1. <!--路由关系1与2的方式相同--> 
    2. {% url 'h1' 2012 %} # 2012为随意填写数据 
    3.  
    4. <ul> 
    5. {% for item in data_list %} 
    6. <li><a href="{% url 'h1' item %}">{{ item }} Archive</a></li> 
    7. {% endfor %} 
    8. </ul> 
    4.4 Model中反向解析

    待整理

    5. 名称空间

    待整理

  • 相关阅读:
    POJ 题目2750 Potted Flower(线段树求环型区间中连续区间的最大和)
    即使没人看我们也要坚持写Blog
    鸟哥的Linux私房菜-----7、硬件管理
    android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题
    hdu4614Vases and Flowers 线段树
    安装npm及cnpm(Windows)
    安装npm及cnpm(Windows)
    安装npm及cnpm(Windows)
    Echarts设置点击事件
    Vs Code中炫酷写代码插件Power Mode的安装配置
  • 原文地址:https://www.cnblogs.com/sama/p/9289948.html
Copyright © 2020-2023  润新知