zoukankan      html  css  js  c++  java
  • 路由

    设么是路由?

      它的本质是URL与要为该URL调用的视图函数之间的映射表。

    我们就是以这种方式告诉Django,遇到哪个URL的时候,要对应执行哪个函数。

    基本格式: 

    from django.conf.urls import url
    
    urlpatterns = [
         url(正则表达式, views视图,参数,别名),
    ]

    参数说明:

    • 正则表达式:一个正则表达式字符串
    • views视图:一个可调用对象,通常是一个视图函数
    • 参数: 可选的要传送给视图函数的默认值(字典形式)
    • 一个可选的name参数

    需要注意的是:

      Django 2.0版本中的路由系统是下面的写法

    from django.urls import path,re_path
    
    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.0版本中的re_path和1.11版本的url是一样的用法

     一 分组 匹配:

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        url(r'^articles/2003/$', views.special_case_2003),
        url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
        url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
        url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),

    如果 使用了分组 匹配,那就相当于是一个分组 一个 参数,会按照位置参数传递给 视图函数.(需要说明的是,传给视图函数的参数过来是一个字符串)

    二 命名分组:(起名字)
      他会把参数一以关键字餐宿传给视图函数

    三 视图函数中可以指定默认值:

     

    # urls.py中
    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        url(r'^blog/$', views.page),
        url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
    ]
    
    # views.py中,可以为num指定默认值
    def page(request, num="1"):
        pass

    四  解决url太多得问题 (app区分功能的) 路由分发:

      include 

    from django.conf.urls import url, include
    from django.contrib import admin # 自带的
    from app01 import views
    
    urlpatterns = [
        url(r'^app01/', include('app01.urls')), # 先匹配一级目录 然后再匹配二级或三级
        url(r'^app02/', include('app02.urls')),
    ]

    五 url 和反向解析 (成对出现的)视图和模板都可以

     导入模块: from django.urls import NoReverseMatch, reverse

    1.普通url :

      命名:

    url(r'^blog/$', views.blogs, name='xxxxx'), # 这里反向解析拿到的是  /blong/ 可以理解为跟他的别名(name没关系,)
    只是通过这个name(可以随便写)想拿到哪的前面的完整的地址,其目的是你前面的正则怎么变,我都可以把它转成一个地址拿出来,通常
    这里对应的一个html的文件名,我们就可以不用写死就能跳转地址.

    视图中: 

    reverse('xxxxx')    ——》   ‘/blog/’ 

    模板中:让4edqw

    {% url 'xxxxx' %} 这是固定格式

    2.分组:

      命名: 

     url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog, name='blog'), 

    视图中:

    reverse('blog',args=('2019','01'))    ——》   ‘/blog/2019/01/’ # 这里反向解析只不过是想生成一个我自己想要的
    全地址 跟你网页输入的地址没有关系,这里就相当于,我给的两个参数2019和01 再加上之前正则里的blong 跟name没关系,不过
    要说的是,我要想拼和他的格式一样的地址,可以加一个args()里面可以,跟多个参数

    3命名分组: 

     url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog, name='blog'),

    视图中:

        reverse('blog',args=('2019','01'))    ——》   ‘/blog/2019/01/’
    
        reverse('blog',kwargs={'year':'2018','month':12})    ——》   ‘/blog/2018/12/’

    模板中:

    {% url 'blog' '2018' '12' %}    ——》 /blog/2018/12/
    
        {% url 'blog' year='2018' month='12' %}    ——》 /blog/2018/12/
    
            {% url 'blog' month='12'  year='2018' %}    ——》 /blog/2018/12/

    六 namespace

      

    url('app01/', include('app01.urls', namespace='app01')),
    url('app02/', include('app02.urls', namespace='app02'))

      视图: 

    reverse('app01:home')

      模板;

    {% url 'app01:home' %}

      

       

  • 相关阅读:
    word批量打印工具,c#写的
    word添加页眉脚和设置各页不同的页眉页脚.
    打印机双面打印
    ORACLE OCP认证
    基于.net程序,使用cefsharp开发的打开网页工具,如何不加载图片
    在iis上运行的服务器端程序,运行一段时间后,访问都只出现一行乱码,回收进程池后又好了,求大神回复
    ArcGis API for JavaScript 开发笔记一 加载地图
    修改现有消息类让.net core项目支持Protobuf
    结合现有分布式系统的数据一致性思考
    让现有vue前端项目快速支持多语言
  • 原文地址:https://www.cnblogs.com/systemsystem/p/10317298.html
Copyright © 2011-2022 走看看