zoukankan      html  css  js  c++  java
  • Django之路由分发和反向解析

    一.路由分发:

    路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系

    from django.conf.urls import url,include
    from app03 import urls as app03_urls
    from app01 import urls as app01_urls
    from app02 import urls as app02_urls
    urlpatterns = [
        url(r'^app03/',include(app03_urls)),
        url(r'^app01/',include(app01_urls)),
        url(r'^app02/',include(app02_urls))
    
    ]

    首先导入include模块,其次确保app下有urls文件,运行效果如下:

     如果想访问app01下的index页面,只需要加上app01/index即可

    同样的app中也可以有views文件和templates文件夹,这样每个app就是独立的前后端程序

    二.反向解析

    试想一个场景,你有200多个a标签,href都指向index/,有一天在urls里面index改为了new_index,那么你只能手动改变a标签中的href,当你改完,又变成了my_index,那么一天的时间都可能在改地址,那么有没有什么方法,不再把程序写死,反向解析就是应用于此。

    通过名字反向推导出页面文件,类似于字典

    无分组:

    urlpatterns = [
      url(r'^login/',views.login,name='login_name'),
    ]

    第一步指定name

    在后端的使用:

    首先导入reverse模块

    from django.shortcuts import reverse

    其次在views的函数里面:

    def login(request):
        res=reverse('login_name')#login_name是在urls里面定义的名字
        print(res)

    其中res的打印如下:

    在前端的使用:

    <a href="{%url 'login_name'%}">1111111111</a>

    语法:{%url ‘ 名称’%}

    这样的写法就不会写死了,无论怎么改,只要名字不变,都可以导向该页面

    无名分组:

    urlpatterns = [
      url(r'^login/(d+)',views.login,name='login_name'),
    ]

    views的函数:

    def login(request,xxx):
        res=reverse('login_name',args=(xxx,))
        print(res)

    打印一下res:

    res=reverse('login_name',args=(xxx,)),其中的args=(xxx,),不是固定的,如果你喜欢写个1也不会影响结果,
    例如
    res=reverse('login_name',args=(1,)),只要满足匹配规则,都是可以随意写的

    在前端的使用:

    <a href="{%url 'login_name' xxx%}">1111111111</a>

    其中xxx是我在renderf中传入的参数,可以动态的指定路径,如果嫌弃麻烦,可以随意写个满足正则的参数,我的正则是d+,所以下面的也是可以的

    <a href="{%url 'login_name' 2333%}">1111111111</a>
    View Code

    语法:{%url ‘ 名称’ 参数%},必须要有,不然不能匹配

    有名分组:

    urlpatterns = [
      url(r'^login/(?P<year>d+)',views.login,name='login_name'),
    ]

     views的函数:

    def login(request,year):
        res=reverse('login_name',kwargs={'year':year})
        print(res)

    打印一下res:

    res=reverse('login_name',kwargs={'year':year},其中的kwargs={'year':year}同样不是固定的,如果你喜欢写个1也不会影响结果,
    只要满足匹配规则,都是可以随意写的

    在前端的使用:

    
    
    <a href="{%url 'login_name' xxx%}">1111111111</a>
    
    

    在前端使用是和无名分组一样的

    PS:在使用无名分组,有名分组的时候,前端一定要在定义的名字后面加上参数,不然不能匹配

     
  • 相关阅读:
    Codeforces Round #646 (Div. 2)【B. Subsequence Hate题解】
    关于MyBatis常见映射异常
    SQL语句汇总(终篇)—— 表联接与联接查询【转载自https://www.cnblogs.com/ghost-xyx/p/3813688.html】
    SQL语句汇总(二)——数据修改、数据查询【转载自https://www.cnblogs.com/ghost-xyx/p/3798362.html】
    浮动元素引起的问题和解决办法
    PHP 神奇的sprintf函数
    关于this,作用域,属性,原型链的一个小练习
    for...of 与 for...in 区别
    ES6 Promise对象then方法链式调用
    ES6通过WeakMap解决内存泄漏问题
  • 原文地址:https://www.cnblogs.com/98WDJ/p/10712965.html
Copyright © 2011-2022 走看看