簡體   English   中英

如何在 Django 應用程序中處理 URL 模式中的參數

[英]How to deal with params in URL schema in Django application

正如我們所知,大多數 URL 方案的 URL 語法基於以下九部分通用格式: <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

我知道我可以在 Django request.GET dict 中獲取查詢字符串。 但是如何獲取參數呢? Django 中的 HttpRequest 似乎無法處理 URL 中定義的參數。

例如: http : //www.example.com/hello;param1=aaaa;param2=bbbb

有什么方法可以在 Django 中提取這樣的參數,而無需在 url 模式中編寫自己的正則表達式。

任何幫助將不勝感激。

您正在談論的路徑段參數在RFC 2396中定義。 此 RFC 自 2005 年起已過時。新標准 RFC 3986 未定義定義路徑段參數的特定方法。 相關部分指出

除了分層路徑中的點段之外,路徑段被通用語法認為是不透明的。 [...] 例如,分號 (";") 和等號 ("=") 保留字符通常用於分隔適用於該段的參數和參數值。 [...] 參數類型可能由特定於方案的語義定義,但在大多數情況下,參數的語法特定於 URI 解引用算法的實現。

Django 使用新標准,並沒有定義任何解析路徑段參數的特定方式。 但是,Python 定義了urlparse()函數,它根據 RFC2396 解析 url。 您可以使用它來提取路徑參數:

from urllib.parse import urlparse  # urlparse.urlparse on Python 2

params = urlparse(request.path).params

要捕獲參數,您必須據此定義 url 模式。

讓我們假設您的網址是http://myurl.com/mydashboard/250?sort=-1&q=this所以這里 250 是您想要的參數。

要捕獲相同的內容,您必須像下面這樣定義 url

url(r'^mydashboard/(?P<weeknum>\d+)/$',
    mydashboard, name='mydashboard'),

現在 mydashboard 的視圖定義將有另一個輸入參數,如下所示

def nagdashboard(request, weeknum):

並獲得可以使用的 GET params 或 POST params。

request.GET.get('sort')

有關模式的進一步閱讀,請參閱此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM