在django中,網址與正則表達式模式相匹配。
的url
線的一般格式是:
url(the_pattern, the_view_name_or_callable, **any_extra_arguments)
的關鍵點是the_pattern
,這是一個正則表達式和任何相匹配可以作爲參數視圖函數傳遞。
捕獲並傳遞到視圖函數的模式的任何部分實際上都與函數的簽名(您在其中定義名稱和參數的位置的def
行)匹配,這一點很重要。否則,Django會拋出一個錯誤。
所以,現在,用這種方式 - 讓我們處理實際問題。
你想要一個網址,如/the_great_gatsby
重定向到的頁面偉大的蓋茨比。
的第一步是識別匹配the_great_gatsby
的圖案。您可以使用[_\w]+
這意味着「一個或多個單詞字符或_」,並將其插入的網址:
url(r'/[_\w]+$', views.detail, name='detail')
接下來,你必須告訴Django如何捕捉模式,並將其傳遞給視圖的方法一個論點。
您的視圖的方法是:def detail(request, movie_title)
。所以在Django在URL中/
後傳進去的是(與模式匹配)與參數name movie_title
,所以我們要的是這樣的:
def detail(request, movie_title)
^^^^^^^^^^^
---------------|
|
vvvvvvv
url(r'/[_\w]+$', views.detail, name='detail')
我們修改正則表達式以確保Django的捕獲任何匹配,然後爲其分配一個名稱。要做到這一點,包正則表達式的部分(?P<name_of_variable>expression)
這樣的:
url(r'/(?P<movie_title>[_\w+])$', views.detail, name='detail')
現在,無論是/
後拍攝的圖像會作爲參數movie_title
到views.detail
方法傳遞。
當然,你必須確保你的瀏覽功能與捕獲到的字符串做正確的事。在你的情況下,你的視圖方法是通過主鍵進行搜索,並且將無法產生任何結果(並且會引發異常),因爲沒有電影將標題作爲主鍵;但這是另一個問題。
閱讀[教程](https://docs.djangoproject.com/en/1.8/intro/tutorial01/),它涵蓋了這個和其他基本問題。 – alexanderlukanin13