2015-10-05 101 views
2

因此,我有一個項目列表,我希望所有項目都可以直接將用戶導向關於該項目的標準信息頁面。我並不完全瞭解django中的動態url系統。我的內容html文件被稱爲detail.html。我們的目標是點擊一個電影項目,並且被定向到一個頁面標題「blahblah.com/specific_movie_title」Django中的動態網址

在views.py我有:

def detail(reuqest, movie_title): 
    moviePage = Movie.objects.get(pk=movie_title) 
    return render_to_response('detail.html', {'detail':moviePage, RequestContext(request)) 

在urls.py我也行與此對應的是:

url(r'^$', views.detail, name='detail') 

我可以幫助糾正這兩個代碼塊嗎?

+1

閱讀[教程](https://docs.djangoproject.com/en/1.8/intro/tutorial01/),它涵蓋了這個和其他基本問題。 – alexanderlukanin13

回答

3

在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_titleviews.detail方法傳遞。


當然,你必須確保你的瀏覽功能與捕獲到的字符串做正確的事。在你的情況下,你的視圖方法是通過主鍵進行搜索,並且將無法產生任何結果(並且會引發異常),因爲沒有電影將標題作爲主鍵;但這是另一個問題。

+0

優秀的答案.. –

+0

謝謝你這個很清楚!而且就是遇到了這個問題。好吧,「pk」代表主鍵。那麼我需要那個「movie_object」行嗎?我可以直接傳入標題嗎? –

+0

我得到它的工作!但是我的數據都沒有被傳遞,url仍然是「~~~/detail.html」 –

0

你可以配置你urlview這樣

urls.py

url(r'^movie/(?P<movie_title>\w+)$', views.movie_detail, name='detail') 

views.py

def movie_detail(request, movie_title): 
    movie_object = Movie.objects.get(pk=movie_title) 
    return render(request, 'moview-detail.html', {'movie_object':movie_object} 

,並在你的HTML {% url 'app_name:detail' movie_title %}

+0

我還是收到一個「Page Not Found」的~~~/detail.html當我點擊一個鏈接 –