码迷,mamicode.com
首页 > Web开发 > 详细

urls.py路由系统分发的本质

时间:2018-01-17 00:11:14      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:conf   rtc   port   生成   cmd   class   def   函数   转发   

路由系统分发的本质

反向生成redirect跳转url

1.在urls.py中指定url的name

from django.conf.urls import url
from django.contrib import admin

from app01 import views

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

2.在views视图函数中使用reverse指定 INDEX地址

from django.shortcuts import render, HttpResponse, redirect
from django.shortcuts import reverse


def index(request):
    return HttpResponse("hello")


def login(request):
    # 通过reverse("INDEX") 指向 "INDEX" 别名
    return redirect(reverse("INDEX"))

应用url的分发include

1.将包含cmdb应用的url请求,转发给cmdb引用中的urls.py中

from django.conf.urls import url, include
from django.contrib import admin

from app01 import views

urlpatterns = [
    # 127.0.0.1:8000/cmdb/xxxx/   cmdb的url 转到cmdb 应用下的urls中
    url(r'^cmdb/', include("cmdb.urls")),
]

2.在指定APP的项目中,创建一个 urls.py文件

from django.conf.urls import url
from cmdb import views

urlpatterns = [
    # 跳转到该应用中的 views 视图函数中
    url(r'^hosts/$', views.hosts),
]

反向生成URL地址,指定namespace

1.将指定app的url跳转,加上namespace="o",指定跳转到哪个应用app

from django.conf.urls import url, include
from django.contrib import admin

from app01 import views

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index, name="INDEX"),
    url(r'^login/', views.login),
    url(r'^cmdb/', include("cmdb.urls", namespace="c")),
    url(r'^openstack/', include("openstack.urls", namespace="o")),
]

2.在views的视图函数中,使用redirect跳转路径时需要加上前缀"o:hosts"

from django.shortcuts import render, HttpResponse, redirect
from django.shortcuts import reverse

def index(request):
    return HttpResponse("hello")

def login(request):
    # 登录成功后,跳转到 openstack 应用的 主机列表页面
    return redirect(reverse("o:hosts"))

通过 循环的形式 添加URL地址

from django.conf.urls import url

from app01 import views

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    # url(r'^index/', views.index, name="INDEX"),
    url(r'^login/', views.login),
]

# 通过for 循环将,生成的url 添加到 urlpatterns 中
for i in range(10):
    temp = []
    for j in range(5):
        temp.append(url(r'^inner_%s/' % j, views.login))
    v = url(r'^login_%s/' % i, (temp, None, None))
    urlpatterns.append(v)

输出,生成的url列表:

^login/
^login_0/ ^inner_0/
^login_0/ ^inner_1/
^login_0/ ^inner_2/
^login_0/ ^inner_3/
^login_0/ ^inner_4/
^login_1/
^login_2/
^login_3/
^login_4/
^login_5/
^login_6/
^login_7/
^login_8/
^login_9/

urls.py路由系统分发的本质

标签:conf   rtc   port   生成   cmd   class   def   函数   转发   

原文地址:https://www.cnblogs.com/baolin2200/p/8297185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!