美文网首页
django之url正/反向解析

django之url正/反向解析

作者: John_Phil | 来源:发表于2019-07-20 08:49 被阅读0次

    在include方法里面指定namespace却不提供app_name是不允许的。
    在包含的模块里设置app_name变量,或者在include方法里面提供app_name参数。


    报错截图
    runserver发生错误
    django.core.exceptions.ImproperlyConfigured: 
    Specifying a namespace in include() without providing an app_name is not supported. 
    Set the app_name attribute in the included module, 
    or pass a 2-tuple containing the list of patterns and app_name instead.
    

    解决方法
    方法1:在 主文件夹/urls.py中修改

    from django.urls import path,include
    from app import urls as app_url
    urlpatterns = [
        path('', include((common_url,'common'), namespace='common')),
    ]
    
    主文件夹下urls.py配置

    方法2:在 app文件夹/urls.py中修改

    from django.urls import path
    from .views import index
    app_name='common'
    urlpatterns = [
        path('',index,name='index'),
    ]
    
    在app文件夹下urls.py配置

    正向解析与反向解析

    urlinfo.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <a href="/cmdb/urlinfo">cmdb/userinfo</a> <br>
    <a href="/cmdb/urlinfo/tom">cmdb/userinfo/tom</a><br>
    <a href="/cmdb/urlinfo/tom/10">cmdb/userinfo/tom/10</a><br>
    <a href="/cmdb/urlinfo/tom/tomnickname/10">cmdb/userinfo/tom/tomnickname/10</a><br>
    <a href="/cmdb/urlinfo/2019/02/12">/cmdb/urlinfo/2019/02/12</a><br>
    <a href="{% url 'cmdb:userinfo1' %}">url 'cmdb:userinfo1'</a>
    <a href="{% url 'cmdb:userinfo2' 'tom' 10 %}">url 'cmdb:userinfo2' tom 10 </a><br>
    <a href="{% url 'cmdb:userinfo3' name='tom' age=19 nickname='tomnickname' %}">cmdb/userinfo/tom/tomnickname/10</a><br>
    
    <br><br>
    通过路由获得用户信息<br>
    info:{{ info }} <br>
    name:{{ name }}<br>
    nickname:{{ nickname }}<br>
    age:{{ age }}
    year:{{ year }}
    month:{{ month }}
    day:{{ day }}
    </body>
    </html>
    

    其中解析部分如下

    <-- 正向解析 -->
    <a href="/cmdb/urlinfo">cmdb/userinfo</a> <br>
    <a href="/cmdb/urlinfo/tom">cmdb/userinfo/tom</a><br>
    <a href="/cmdb/urlinfo/tom/10">cmdb/userinfo/tom/10</a><br>
    <a href="/cmdb/urlinfo/tom/tomnickname/10">cmdb/userinfo/tom/tomnickname/10</a><br>
    <a href="/cmdb/urlinfo/2019/02/12">/cmdb/urlinfo/2019/02/12</a><br>
    <-- 反向解析 -->
    <a href="{% url 'cmdb:userinfo1' %}">url 'cmdb:userinfo1'</a>
    <a href="{% url 'cmdb:userinfo2' 'tom' 10 %}">url 'cmdb:userinfo2' tom 10 </a><br>
    <a href="{% url 'cmdb:userinfo3' name='tom' age=19 nickname='tomnickname' %}">cmdb/userinfo/tom/tomnickname/10</a><br>
    

    正向解析url.py

    django2 中使用
    path来进行配置普通路径使用r
    e_path来配置正则表达式路径
    (?P<name>partten)来定义有名路径 其中name为名字 patten为正则表达式

    #正向解析url
    path("urlinfo", views.urlinfo1),
    path("urlinfo/<str:name>", views.urlinfo2),
    path("urlinfo/<str:name>/<int:age>", views.urlinfo3),
    # path("urlinfo/<str:nickname>/<str:name>/<int:age>",views.urlinfo4), #位置匹配 re_path(r"^urlinfo/(?P<name>[A-Za-z]{0,})/(?P<nickname>[A-Za-z]{0,})/(?P<age>\d{0,})/$",views.urlinfo5),#名称匹配
    re_path(r'^urlinfo/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})', views.urlinfo6),
    

    反向解析url.py

    在主目录下的urls中配置namespace,子app目录下urls中配置name
    页面中通过 <% url namesapce:name %>来反向匹配

    #反向解析url
    path("urlinfo", views.urlinfo1,name="userinfo1"),
    path("urlinfo/<str:name>/<int:age>", views.urlinfo3,name="userinfo2"),
    re_path(r"^urlinfo/(?P<name>[A-Za-z]{0,})/(?P<nickname>[A-Za-z]{0,})/(?P<age>\d{0,})/$",views.urlinfo5,name="userinfo3"),
    
    子目录 app目录下urls.py配置
    反向解析url结果

    在重定向时使用反向解析
    先导入模块 from django.urls import reverse
    传参数是 位置参数名 args=(tuple) tuple
    参数名参数 kwargs ={key:value .....} dict

    app目录下views.py

      def urlinfo7(request):
        #无参数
        url=reverse('cmdb:userinfo1')
        #顺序参数
        url=reverse('cmdb:userinfo2',args=(1,2))
        #含参参数
        url=reverse('cmdb:userinfo3',kwargs={"name":"tom","age":19,"nickname":"tomnickname"})
        return redirect(url)
    

    相关文章

      网友评论

          本文标题:django之url正/反向解析

          本文链接:https://www.haomeiwen.com/subject/qzhelctx.html