zoukankan      html  css  js  c++  java
  • Python

    URL 配置:

    urls.py 中的基本配置:

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

    在 Django 2 版本后将 url 改为 path

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

    正则表达式:一个正则表达式字符串
    views 视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
    参数:可选的要传递给视图函数的默认参数(字典形式)
    别名:一个可选的 name 参数

    正则表达式:

    $:

    如果在一个目录后加上 $,访问该目录后不存在的页面则会报错

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^test/', views.test),
    ]
    

    访问一个不存在的页面

    如果加上 $

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^test/$', views.test),
    ]
    

    访问一个不存在的页面

    报错

    其它的正则表达式:

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^test/[0-9]{2,4}/', views.test),  # test/ 目录后可以访问 2-4 位 0-9 的数字
    ]
    

    访问:http://127.0.0.1:8000/test/1234/,返回正常

    访问:http://127.0.0.1:8000/test/12345/,报 404

    可以使用多个正则表达式

    视图函数的参数:

    一:

    通过括号可以将正则表达式匹配到的结果作为视图函数的参数

    urls.py:

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^test/([0-9]{2,4})/([a-zA-Z]{2,4})/', views.test),
    ]
    

    views.py:

    from django.shortcuts import render
    
    def test(request, arg1, arg2):
        print("arg1: ", arg1)
        print("arg2: ", arg2)
        return render(request, "test.html")
    

    访问:http://127.0.0.1:8000/test/1234/acd/

    该方法给视图函数传递的是位置参数

    二:

    还可以使用正则表达式匹配语法:

    (?P<name>pattern)
    

    其中 name 是组的名称,pattern 是要匹配的模式,注意这里是大写的 P

    该方法传的参数是关键字参数

    urls.py:

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^test/(?P<id>[0-9]{2,4})/(?P<title>[a-zA-Z]{2,4})/', views.test),
    ]
    

    views.py:

    from django.shortcuts import render
    
    def test(request, id, title):
        print("id: ", id)
        print("title: ", title)
        return render(request, "test.html")
    

    访问:http://127.0.0.1:8000/test/1234/acd/

    获取的 id 值为 1234,但是是字符类型

    三:

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

    urls.py:

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^blog/$', views.blog),
        url(r'^blog/page=(?P<num>[0-9]+)/$', views.blog)
    ]
    

    views.py:

    from django.shortcuts import render
    
    def blog(request, num="1"):
        print("当前页面:", num)
        return render(request, "test.html")
    

    访问:http://127.0.0.1:8000/blog/

    访问:http://127.0.0.1:8000/blog/page=34/

    四:

    直接给视图函数传参数

    urls.py:

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^test/', views.test, {"username": "admin", "password": "123456"}),
    ]
    

    views.py:

    from django.shortcuts import render
    
    def test(request, username, password):
        print("username: ", username)
        print("password: ", password)
        return render(request, "test.html")
    

    访问:http://127.0.0.1:8000/test/

    APPEND_SLASH 参数:

    可在 settings.py 中添加 APPEND_SLASH 参数,该参数在 settings.py 中没有写出来,默认值为 True

    APPEND_SLASH = True:

    访问:http://127.0.0.1:8000/blog

    会自动在 blog 后加个 /,即为访问 http://127.0.0.1:8000/blog/

    APPEND_SLASH = False:

    访问:http://127.0.0.1:8000/blog

    不会自动在 blog 后加个 /,所以会报错

    include 其他的 URL 配置:

    在 app01/ 下创建一个 urls.py 文件

    app01/urls.py:

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^blog/', views.blog),
    ]
    

    mysite2/urls.py:

    from django.conf.urls import url, include
    from app01 import views
    from app01 import urls as app01_urls
    
    urlpatterns = [
        url(r'^test/', include(app01_urls))
    ]
    

    所有以 test/ 开头的 url 都交给 app01/urls.py 来处理

    访问:http://127.0.0.1:8000/test/blog/

  • 相关阅读:
    AntDesign(React)学习-9 Dva model reducer实践
    AntDesign(React)学习-8 Menu使用 切换框架页内容页面
    AntDesign(React)学习-7 Menu添加事件
    AntDesign(React)学习-6 Menu展示数据
    AntDesign(React)学习-5 路由及使用Layout布局
    AntDesign(React)学习-4 登录页面提交数据简单实现
    AntDesign(React)学习-3 React基础
    AntDesign(React)学习-2 第一个页面
    AntDesign(React)学习-1 创建环境
    正则表达式分组捕获非捕获的示例理解
  • 原文地址:https://www.cnblogs.com/sch01ar/p/11277755.html
Copyright © 2011-2022 走看看