Django 路由
定義:
URL配置(URLconf)就像Django 所支撐網(wǎng)站的目錄。它的本質(zhì)是URL與要為該URL調(diào)用的視圖函數(shù)之間的映射表;你就是以這種方式告訴Django,對(duì)于這個(gè)URL調(diào)用這段代碼,對(duì)于那個(gè)URL調(diào)用那段代碼。
URL配置格式:
'''urlpatterns = [url(正則表達(dá)式, views視圖函數(shù),參數(shù),別名), ]參數(shù)說(shuō)明:一個(gè)正則表達(dá)式字符串一個(gè)可調(diào)用對(duì)象,通常為一個(gè)視圖函數(shù)或一個(gè)指定視圖函數(shù)路徑的字符串可選的要傳遞給視圖函數(shù)的默認(rèn)參數(shù)(字典形式)一個(gè)可選的name參數(shù)'''URL配置的幾種方式:
1、基本配置
url(r'^index$', views.index),2、基于正則的路由
url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),這時(shí)在view中的相對(duì)應(yīng)的方法就必須接受正則分組中的id
3、添加額外的參數(shù)
url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}),這時(shí)會(huì)在views里的方法調(diào)用中額外傳遞一個(gè)默認(rèn)的參數(shù),而且必須得接收
4、為路由映射設(shè)置名稱
url(r'^home', views.home, name='h1'), url(r'^index/(\d*)', views.index, name='h2'),設(shè)置名稱之后,可以在不同的地方調(diào)用,如:
- 模板中使用生成URL ? ? {% url 'h2' 2012 %}
- 函數(shù)中使用生成URL ? ??reverse('h2', args=(2012,)) ? ? ?路徑:django.urls.reverse
- Model中使用獲取URL ?自定義get_absolute_url() 方法
5、根據(jù)app對(duì)路由規(guī)則進(jìn)行分類(lèi)
url(r'^web/',include('web.urls')),?URL反向解析:
一、原因:
在使用Django 項(xiàng)目時(shí),一個(gè)常見(jiàn)的需求是獲得URL 的最終形式,以用于嵌入到生成的內(nèi)容中(視圖中和顯示給用戶的URL等)或者用于處理服務(wù)器端的導(dǎo)航(重定向等)。
人們強(qiáng)烈希望不要硬編碼這些URL(費(fèi)力、不可擴(kuò)展且容易產(chǎn)生錯(cuò)誤)或者設(shè)計(jì)一種與URLconf 毫不相關(guān)的專門(mén)的URL 生成機(jī)制,因?yàn)檫@樣容易導(dǎo)致一定程度上產(chǎn)生過(guò)期的URL。
換句話講,需要的是一個(gè)DRY 機(jī)制。除了其它有點(diǎn),它還允許設(shè)計(jì)的URL 可以自動(dòng)更新而不用遍歷項(xiàng)目的源代碼來(lái)搜索并替換過(guò)期的URL。
獲取一個(gè)URL 最開(kāi)始想到的信息是處理它視圖的標(biāo)識(shí)(例如名字),查找正確的URL 的其它必要的信息有視圖參數(shù)的類(lèi)型(位置參數(shù)、關(guān)鍵字參數(shù))和值。
Django 提供一個(gè)辦法是讓URL 映射是URL 設(shè)計(jì)唯一的地方。你填充你的URLconf,然后可以雙向使用它:
- 根據(jù)用戶/瀏覽器發(fā)起的URL 請(qǐng)求,它調(diào)用正確的Django 視圖,并從URL 中提取它的參數(shù)需要的值。
- 根據(jù)Django 視圖的標(biāo)識(shí)和將要傳遞給它的參數(shù)的值,獲取與之關(guān)聯(lián)的URL。
第一種方式是我們?cè)谇懊娴恼鹿?jié)中一直討論的用法。第二種方式叫做反向解析URL、反向URL 匹配、反向URL 查詢或者簡(jiǎn)單的URL 反查。
在需要URL 的地方,對(duì)于不同層級(jí),Django 提供不同的工具用于URL 反查:
- 在模板中:使用url 模板標(biāo)簽。
- 在Python 代碼中:使用django.core.urlresolvers.reverse()?函數(shù)。
- 在更高層的與處理Django 模型實(shí)例相關(guān)的代碼中:使用get_absolute_url()?方法。
二、方式:
1、先配置URL
from django.conf.urls import urlfrom . import viewsurlpatterns = [#...url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),#... ]2、在模版中使用URL反向生成
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a><ul> {% for yearvar in year_list %} <li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li> {% endfor %} </ul>3、在py中使用
from django.core.urlresolvers import reverse from django.http import HttpResponseRedirectdef redirect_to_year(request):# ...year = 2006# ...return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))其他:
url(r'^app01/', include('app01.urls', 'app01', 'app01')),# app01.urls url(r'^index/(?P<name>\w+)/$', views.index, name='index'),# url(r'^app01/', ([ # url(r'^index/(?P<name>\w+)/$', views.index, name='index'), # ], 'app01', 'app01')),from django.shortcuts import HttpResponse from django.urls import reverse
def index(request, name):print(reverse('app01:index', kwargs={'name': name}))return HttpResponse('ok')
?
轉(zhuǎn)載于:https://www.cnblogs.com/liuxiaowei/p/7812841.html
總結(jié)
- 上一篇: 市值近1400亿 国产CPU芯片龙头登陆
- 下一篇: Oracle存储过程--案例