1. 程式人生 > >Django url 引數及name引數介紹

Django url 引數及name引數介紹

url()函式可以被傳入4個引數,兩個是必須的:regex和view,兩個是可選的:kwargs和name,下面來看一下這些引數是幹啥的。

url()引數:regex
“regex”經常被用作正則表示式的縮寫,正則表示式是一種對字串進行模式匹配的語法,對於我們而言,就是對url模式的匹配。Django會把請求的url從第一條正則表示式開始匹配,直到找到一個可以匹配上的正則表示式為止。
需要注意的是,正則表示式並不查詢get或者post引數,以及域名,例如,當請求指向https://www.example.com/myapp/,URLconf會查詢myapp/。當請求指向https://www.example.com/myapp/?page=3, URLconf還是會查詢myapp/
另外,如果您需要正則表示式的幫助,請參閱
re模組的文件,然而,實際上,您不需要是正則表示式的專家,因為您只需要知道如何捕獲簡單的模式。實際上,複雜的正則表示式的查詢效能會很差,所以你可能不應該依靠正則表示式的全部功能。最後,一個性能說明:這些正則表示式是第一次載入URLconf模組時被編譯。它們超級快(只要查詢不是太複雜,如上所述)。
url()引數:view
當正則表示式被匹配,view函式就會被呼叫。而且HttpRequest物件會作為第一個引數,其它被正則表示式捕獲的值會作為其它引數傳入到函式中。

url()引數:kwargs

其它的引數以字典的形式傳入

url()引數:name

給你的url起個名字能讓你在其它地方明確引用它。這個強大的功能可以讓你在修改URL模式的同時只修修改單個檔案 。(好吧,沒看懂,那我們舉個列子:)

建立一個django專案後,新增一個模板頁:


URL配置如下:


我們計算加法的時候用的是 /add/4/5/ ,後來需求發生變化,比如改成 /4_add_5/,但在網頁中,程式碼中很多地方都寫死的 /add/4/5/。如果這樣寫“死網址”,會使得在改了網址(正則)後,模板(template),檢視(views.py,用以用於跳轉),模型(models.py,可以用用於獲取物件對應的地址)用了此網址的,
都得進行相應的更改,修改的代價很大,一不小心,有的地方沒改過來,就不能用了。那麼有沒有更優雅的方式來解決這個問題呢?當然答案是肯定的

使用:

<a href="{% url 'add2' 4 5 %}">link</a>
上面的程式碼渲染成最終的頁面是:
<a href="/add/4/5/">link</a>

這樣就可以通過 {% url 'add2' 4 5 %} 獲取到對應的網址 /add/4/5/
當 urls.py 進行更改,前提是不改 name(這個引數設定好後不要輕易改),獲取的網址也會動態地跟著變,比如改成:

url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
注意看重點 add 變成了 new_add,但是後面的 name='add2' 沒改,這時 {% url 'add2' 4 5 %} 就會渲染對應的網址成 /new_add/4/5/
用在 views.py 或 models.py 等地方的 reverse函式,同樣會根據 name 對應的url獲取到新的網址。
想要改網址的時候,修改 urls.py 中的正則表示式部分(url 引數第一部分),name 不變的前提下,其它地方都不需要修改

備註:生成url的函式reverse:

from django.core.urlresolvers import reverse  # django 1.4.x - django 1.10.x
from django.urls import reverse  # django 1.10.x 新的,更加規範了
reverse('add2', args=(4,5))
u'/add/4/5/'
reverse('add2', args=(444,555))
u'/add/444/555/'
reverse 接收 url 中的 name 作為第一個引數,我們在程式碼中就可以通過 reverse() 來獲取對應的網址(這個網址可以用來跳轉,也可以用來計算相關頁面的地址),只要對應的 url 的name不改,就不用改程式碼中的網址。

所有的努力都值得期許,每一份夢想都應該灌溉!

相關推薦

Django url 引數name引數介紹

url()函式可以被傳入4個引數,兩個是必須的:regex和view,兩個是可選的:kwargs和name,下面來看一下這些引數是幹啥的。url()引數:regex “regex”經常被用作正則表示式的縮寫,正則表示式是一種對字串進行模式匹配的語法,對於我們而言,就是對ur

CI框架url模式獲得引數

CI框架獲取post和get引數_CodeIgniter心得   請參考:

python測試開發django-4.獲取url引數name的作用

前言 如開啟部落格園按時間分類標籤頁【https://www.cnblogs.com/yoyoketang/archive/2018/10.html】,裡面是時間引數是動態的,如果我想獲取裡面的時間引數2018和10這兩個引數,這就涉及到url引數的獲取了。 獲取url引數 先用path去匹配一個url

Django -- url中的引數介紹

參考文件直達 url()函式傳遞四個引數,兩個必選引數:regex和view,兩個可選引數:kwargs和name。 在這裡,值得重新審視這些引數。 url()引數:regex 術語“regex”是一種常用的縮寫,意思是“正則表示式”,它是用於匹配字串中的模式的語法,換言之,在

django urlname引數的作用

urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', views.index,name='home'), url(r'^add/$', views.add,name='add'), ]

R studio介面介紹par引數詳解

本篇文章主要包含以下內容,其中主要詳細介紹了par引數。其中par引數中的關於圖形位置引數能夠調整影象位置,達到一張圖中顯示多張圖的效果。 1. R studio 介面 2.par引數 2.1圖形位置引數 2.2顏色設定引數(待更新) 2.3文字引數(待更新)

jQuery ajax模板引數介紹

Ajax簡介: Ajax 即“Asynchronous Javascript And XML”(非同步 JavaScript 和 XML),是指一種建立互動式網頁應用的網頁開發技術。 Ajax = 非同步 javaScript 和 XML(標準通用標記語言的

django URL的補充 預設值 傳多個引數

      url 後面還可以加上預設值 預設值 url(r'^index/', views.index, {'name': 'root'}),   urls.py url對應關係 from django.conf.urls import url

Thymeleaf 之 內建物件、定義變數、URL引數標籤自定義屬性_Thymeleaf

如標題所述,這篇文章主要講述Thymeleaf中的內建物件(list解析、日期格式化、數字格式化等)、定義變數、獲取URL的引數和在頁面標籤中自定義屬性的應用。 如果對Thymeleaf的基本使用、maven依賴等不清楚的可以先閱讀我的另一篇文章《Thymeleaf 之 初

django的動態urlurl裡含有引數,含有引數url

  #!/usr/bin/env python # coding:utf-8 from django.conf.urls import url,include from django.contrib import admin #記得匯入app01 from app01 import view

django欄位查詢引數聚合函式

欄位查詢是指如何指定SQL WHERE子句的內容。它們用作QuerySet的filter(), exclude()和get()方法的關鍵字引數。 預設查詢型別為exact。 下表列出了所有的欄位查詢引數: 欄位名 說明 exact

Django模型層之欄位查詢引數聚合函式

該系列教程繫個人原創,並完整發布在個人官網劉江的部落格和教程 所有轉載本文者,需在頂部顯著位置註明原作者及www.liujiangblog.com官網地址。 欄位查詢是指如何指定SQL WHERE子句的內容。它們用作QuerySet的filter(), exclude()和get()方法的關鍵字引數。 預設

MySql jdbc URL 引數編碼說明

mysql JDBC URL格式如下: jdbc:mysql://[host:port]/[database][?引數名1][=引數值1][&引數名2][=引數值2]... 現只列舉幾個重

Django(四)後臺管理Field引數

Django 提供了基於 web 的管理工具,自動管理工具是 django.contrib的一部分,django.contrib 是一套龐大的功能集,它是Django基本程式碼的組成部分。我們只要加少些程式碼,就可以實現強大的後臺功能。與後臺相關檔案是每個app

Django 中接收 URL 中的中文引數

前幾天改造我那個電子課程表時,有個 URL 傳遞的引數我直接用了中文,像這樣:/tt/getxml/?term=2008春。在 IE 中使用很正常,在 Django 裡面接收之後用 request.GET.get('te

Python網路爬蟲(1)--url訪問引數設定

標籤: 環境:Python2.7.9 / Sublime Text 2 / Chrome 1.url訪問,直接呼叫urllib庫函式即可 import urllib2 url=‘http://www.baidu.com/‘ response = urllib2.urlopen(url) html=re

HighCharts中URL在頁面之間傳引數跳轉解決方案

HighCharts中柱狀圖,餅圖等可以實現點選圖表資料來實現頁面之間的跳轉,跳轉到重定向的頁面,並且把對應圖表的資料傳遞到要跳轉到的頁面 下面使用一個簡單的例項進行演示: 這裡使用HighCharts的Cloumn柱狀圖 1.首先,需要在頁面的<script>

SpringBoot Web專案的引數繫結:URL傳參預設引數設定

一、@RequestParam 這個註解用來繫結單個請求資料,既可以是url中的引數,也可以是表單提交的引數和上傳的檔案 它有三個屬性,value用於設定引數名,defaultValue用於對引數設定預設值,required為true時,如果引數為空,會報錯 好,下面展示具

Django:URL-patterns的高階使用方式與URL傳遞引數

# urls.py from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', (r'^blog/$', views.page), #URLconf中把特殊情況放在首位的

ios url 請求頭新增引數自定義cookie

   通過請求頭可以傳遞 一些web 想要的一些資訊,但是這個方法有些侷限性,如果web 跳轉的時候頭的資訊會訊息,最好的方法就是自定義cookie 傳值 NSURL* url = [NSURLURL