zoukankan      html  css  js  c++  java
  • django url别名和反向解析 命名空间

    url别名和反向解析

    1. 我们平时写的url名字都是死的,如果项目过大,需要项目中某个文件名改动一下,那么改动起来就不是一般的麻烦了,所以我们就在定义的时候给url起一个别名,以后不管哪个文件中运用都是用它的别名,这样就方便多了,你的路径名不管怎么改变都不会影响你的操作

    2. 如何给你url起别名

      url(r'^home1/',views.home,name='home'),
      # 像这样,在url后边加一个name叫做home,之后再其他的文件中需要引用这个url就可以直接使用别名
      
      url(r'^home1/(d+)',views.home,name='home'),
      # 如果分组传参数的这种url要怎么去应用呢
      
    3. 别名的使用(反向解析

      #在文件中使用时,我们需要导入一个django的模块,这个模块就是专门用来负责反向解析别名的
      from django.urls import reverse
      #使用如下
      reverse('别名')
      #例如:
      return redirect(reverse('home'))     ----  翻译成  /home1/
      # 我们只需要在需要使用这个文件的时候将这个文件的别名使用reverse()方法反解析出来就行了
      
      或者直接可以写成 return redirect('home')    不需要使用serverse也可以解析出来
      
      # 在html文件中的引用
      <a href="{% url 'home' %} ">主页面</a>    ----  翻译成  /home1/
      #使用url对这个别名进行解析
      
      #带参数的反向解析:
      reverse('index',args=(10,11,))	-- /index2/10/
      
      #带参数的反向解析:
      {% url '别名' 参数1 参数2 %} 
      例如:{% url 'index' 10 %} -- /index2/10/  <a href='/index2/10/'>hhh</a>
      

    命名空间

    路由分发

    1. 由于在项目中可能会创建多个不同的app,如果这些app应用的url都写在项目下的urls文件下,如果文件路径过多,就会很多的文件存在,修改起来特别麻烦,所以我们要解决这个问题

    2. 如何解决这个问题呢?

      #我们可以在每个应用下都写上一个urls.py文件,在这个文件中写入我们需要用到的url,
      
      # 但是浏览器找的url时会从你的项目文件urls文件去找,那么我们需要在项目的urls文件也配置一下
      # 首先导入一个包,专门负责路由分发的
      from django.conf.urls import include  
      
      #所以我们在项目下的urls文件中写url时这样写:
      urlpatterns = [
          url(r'^app01/',include('app01.urls')),
          url(r'^app02/',include('app02.urls')),
      ]
      # 这个意思就会只要匹配到访问路径是app01的就去app01.urls中找路径,匹配到访问路径是app02的就去app02.urls中找路径
      
    3. 在每个app文件下再写一个路由文件urls.py

      1. app01 
          urlpatterns = [
              # url(r'^admin/', admin.site.urls),
              url(r'^home1/',views.home,name='home1'),
          ]
          
      2. app02 
          urlpatterns = [
              # url(r'^admin/', admin.site.urls),
              url(r'^home2/',views.home,name='home1'),
          ]
          
       # 当通过项目文件中的路由匹配到那个app下的时候就会在这个app路由中找相应的路由地址
      

    命名空间

    1. 由于我们在做项目时会给url起别名,如果有多个应用的url别名一样,那么就会出现查找的文件不对,出现错误

    2. 这样我们就需要在项目的urls文件中在改变一下配置了

      urlpatterns = [
          url(r'^app01/',include('app01.urls',namespace='app01')),  
          url(r'^app02/',include('app02.urls',namespace='app02')),
      ]
      
      # namespace = '别名',意思是当前这个app01.urls中的url都归属于当前这个命名空间app01的
      
    3. 在应用的时候:

      #html文件中
      <a href="{% url 'app01:home' %}">返回首页</a>
      # 在别名的前面你需要加上这个命名空间的名称
      
      #在后端的文件中
      return redirect('app02:book2')   # 在别名的前面你需要加上这个命名空间的名称
      
  • 相关阅读:
    vip视频播放
    一行Python代码画心型
    使用赫夫曼编码压缩数据
    动态规划与贪婪算法学习笔记
    boost 编写finger服务
    磁盘保护原理简介
    知乎上的一道题目 如何判断某个二进制数如是否存在两位1中间有包含0的情况?
    <Linux多线程服务端编程>学习记录
    Debian8 下面 muduo库编译与使用
    无盘工作站原理分析
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11665512.html
Copyright © 2011-2022 走看看