Django url反向解析与路由分发名称空间
url反向解析
url.py
- from django.conf.urls import url
- from django.contrib import admin
- from app01 import views
- urlpatterns = [
- url(r'^admin/', admin.site.urls),
- url(r'^loginxxx/', views.login,name='login'),
- url(r'^indexxx/', views.index, name='index'),
- ]
视图views.py
- from django.shortcuts import render, HttpResponse, redirect
- from django.core.urlresolvers import reverse
- def login(request):
- if request.method == 'POST':
- if 1:
- return redirect(reverse('index'))
- return render(request, 'login.html')
- def index(request):
- return HttpResponse('this is index')
模板 templates/login.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="{% url 'login' %}" method="post">
- {% csrf_token %}
- <input type="text" name="user" placeholder="username">
- <input type="password" name="pwd" placeholder="password">
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
总结:
模板中:
- url(r'^loginxxx/', views.login,name='login'),
- ...
- <form action="{% url 'login' %}" method="post"> <!-- 解析成loginxxx/ -->
- ...
- </form>
视图中:
- url(r'^indexxx/', views.index, name='index'),
- ...
- from django.shortcuts import render, HttpResponse, redirect
- from django.core.urlresolvers import reverse
- def login(request):
- if request.method == 'POST':
- if 1:
- return redirect(reverse('index')) # 解析成 indexxx/
- return render(request, 'login.html')
路由分发
项目下的urls.py
- from django.conf.urls import url,include
- urlpatterns = [
- url(r'^app01/', include('app01.urls')),
- url(r'^app02/', include('app02.urls')),
- ]
app01.urls.py
- from django.conf.urls import url
- from app01 import views
- urlpatterns = [
- url(r'^index/', views.index, name='index'),
- ]
app02.urls.py
- from django.conf.urls import url
- from app02 import views
- urlpatterns = [
- url(r'^index/', views.index, name='index'),
- ]
views:(app01跟app02的一样)
- from django.shortcuts import HttpResponse
- from django.core.urlresolvers import reverse
- def index(request):
- return HttpResponse(reverse('index'))
这样,问题来了当我们访问http://127.0.0.1:8000/app01/index/的时候,期待的结果是/app01/index/ 但是url反向解析的结果却是/app02/index/
解决办法:名称空间
名称空间
- 项目下urls.py
- from django.conf.urls import url,include
- urlpatterns = [
- url(r'^app01/', include('app01.urls',namespace='app01')),
- url(r'^app02/', include('app02.urls',namespace='app02')),
- ]
- app01.urls.py
- from django.conf.urls import url
- from app01 import views
- urlpatterns = [
- url(r'^index/', views.index, name='index'),
- ]
- app02.urls.py
- from django.conf.urls import url
- from app02 import views
- urlpatterns = [
- url(r'^index/', views.index, name='index'),
- ]
- app01.views.py
- from django.shortcuts import HttpResponse
- from django.core.urlresolvers import reverse
- def index(request):
- return HttpResponse(reverse('app01:index'))
- app02.views.py
- from django.shortcuts import HttpResponse
- from django.core.urlresolvers import reverse
- def index(request):
- return HttpResponse(reverse('app02:index'))
Django url反向解析与路由分发名称空间的更多相关文章
- [Django框架之路由层匹配、有名 无名分组、反向解析、路由分发、名称空间、伪静态、本地虚拟环境、django版本区别]
[Django框架之路由层匹配.有名 无名分组.反向解析.路由分发.名称空间.伪静态.本地虚拟环境.django版本区别] 路由层 路由即请求地址与视图函数的映射关系,如果把网站比喻成一本书,那路由就 ...
- Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)
摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...
- django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间
目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...
- Django框架路由分发-名称空间
目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...
- Django框架(四)-- 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别、Django虚拟环境搭建
路由控制 一.简单路由配置 url(r'^booklist$', views.booklist) 第一个参数是正则表达式,第二个参数是视图函数 每个正则表达式前面的'r' 是可选的但是建议加上.它告诉 ...
- Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态
一.Django请求生命周期 二.路由层 urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...
- Django框架(四)—— 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别
目录 路由控制 一.简单路由配置 二.无名分组 三.有名分组 四.反向解析 五.路由分发 六.名称空间(一般不使用) 七.伪静态 八.Django 2.x和Django 1.x 路由层区别 九.APP ...
- python 之 Django框架(路由系统、include、命名URL和URL反向解析、命名空间模式)
12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名) ...
- Django路由系统-URL命名&URL反向解析
命名URL和URL反向解析 前言 起始样式,HTML中的href是写死的,不能更改,如下示例代码: # urls中 urlpatterns = [ url(r'^admin/', admin.site ...
随机推荐
- en_java去重排序
@Test public void tes5() { String[] strs ={"e", "ee", "ea", "ei&q ...
- 最新版本Firefox表单css兼容性
场景描述: 为了在各浏览器上传控件保持统一的风格,用隐藏“浏览控件”的方式,在最新版本的Firefox下隐藏的“浏览”按钮漂移了. 问题分析: HTML代码: <form class=" ...
- 太过亲密往往不好——用non-member,non-friend替换member函数
在前一篇文章,我们提到,使用private来代替public以提高class的封装性.这一篇文章,我们将对接口发起攻势.首先来个简单的例子. class WebBrowser { public: vo ...
- hdu2665
题解: 裸的主席树,记录最小值 代码: #include<cstdio> #include<cmath> #include<algorithm> #include& ...
- maven install deploy
1.安装到本地仓库 install jar to local fs mvn .jar -DgroupId=com.bonc -DartifactId=licenseVerify-.jar -Dvers ...
- DevExpress v17.2新版亮点—ASP.NET篇(三)
用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress ASP.NET v17.2 的GridView Control. ...
- BitDefender(比特梵德)特惠活动 免费获取9个月激活码
Bitdefender为了庆祝自己获得2014年最佳杀毒软件,送出9个月的Internet security免费激活码.
- 清除 eclipse svn 账号密码
进入目录 C:\Documents and Settings\administrator\Application Data\Subversion\auth 删除目录下所有文件,然后重新刷新svn地址就 ...
- utf-8和Unicode的区别
链接 utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由. 众 ...
- C#实现Access导入导出Excel
一.Access从Excel中导入数据 .用到的Excel表的格式及内容 实现 [c-sharp] view plaincopyprint? OleDbConnection con = new Ole ...