• 路由系统


    一、实质

    url与函数的对应关系,即映射表

    位置:urls.py

    二、格式

    urlpatterns = [
        path('admin/', admin.site.urls),
    ]
    path('', views.index),

    注意:只要协议、ip和端口号即可

    前面是正则表达式,后面是对应的函数

    三、捕获参数

    通过url获取值  <>

    urls.py文件

    path('test/<arg1>/', views.test),

    views.py文件

    def test(request, arg1):
        print(arg1)
        return HttpResponse("Hello World %s" % arg1)

    注意:两个形参的名字要一致,<>里的值默认类型是str,可以通过<int:arg1>进行数据类型的转换

    注意:GET是通过参数获取值,<>是通过路径获取值

    应用场景:删除和修改

    四、include(路由)

    1、在app中新建urls.py文件,作为二级路由的文件

    2、一级路由

    位置:项目文件夹下的urls.py文件

    from django.urls import include
    # 导入二级路由的urls
    from app01 import urls as app01_url
    
    # home只是单纯的url
    path('home/', include(app01_url)),

    3、二级路由

    位置:app中新建的urls.py文件

    from django.urls import path
    from . import views
    urlpatterns = [
        path('json_test/', views.json_test),
    ]

    4、查看

    注意:path

    五、字典格式的参数,传递给视图函数(一般不这么用)

    在二级路由传递参数,注意:字典的格式

    from django.urls import path
    from . import views
    urlpatterns = [
        path('json_test/', views.json_test, {"name": 'tom'}),
    ]

    在views.py文件,接收参数

    def json_test(request, **kwargs):
        data = kwargs.get("name")
        return HttpResponse(data)

    六、反向解析url

    1、urls.py  重命名

    path('old123/', views.old, name="old_html"),

    2、模板系统

    <a href="{% url 'old_html' %}">点我,跳转到一个旧网页</a>
    <a href="{% url '别名' %}">点我,跳转到一个旧网页</a>

    3、视图系统

    from django.shortcuts import reverse
    def old(request):
        _url = reverse("old_html")
    reverse(别名)

    含参数的反向解析

    1、urls.py文件

    path('first/<key>/', views.first, name="first_html"),

    2、模板系统

    <a href="{% url "first_html" "abc" %}">跳转到第一页</a>

    3、视图系统

    path('index11/<args>/', views.index, name="index_html"),
    path('test/', views.test),
    def index(request, args):
        print(request.path_info)
        print(args)
        return HttpResponse(args)
    
    
    
    def test(request):
        return redirect(reverse("index_html", args=("tom", )))
      _url = reverse("index_html", args=("tom", ))

    传递参数

    补充、re_path

    Django2.0以前的版本,(?p<>)

    在一级路由可以加上命名空间  namespace

    捕获的参数永远是字符串类型

     命名空间

    1、一级路由

    path('home/', include(app01_url, namespace='test')),

    2、模板系统

    <a href="{% url "test:first_html" "abc" %}">跳转到第一页</a>
  • 相关阅读:
    (转)重识new
    【洛谷习题】连续自然数和
    【AHOI2005】约数研究
    【NOIP2003】麦森数
    康托展开
    【洛谷习题】南蛮图腾
    【洛谷习题】吃奶酪
    【NOIP2002】字串变换
    哈希表
    【NOIP2013】货车运输
  • 原文地址:https://www.cnblogs.com/wt7018/p/11257260.html
Copyright © 2020-2023  润新知