在Django架構中偽造捕捉到的URLconf值的方法

來源:互聯網
上載者:User
比如說你有匹配某個模式的一堆視圖,以及一個並不匹配這個模式但視圖邏輯是一樣的URL。 這種情況下,你可以通過向同一個視圖傳遞額外URLconf參數來偽造URL值的捕捉。

例如,你可能有一個顯示某一個特定日子的某些資料的應用,URL類似這樣的:

/mydata/jan/01//mydata/jan/02//mydata/jan/03/# .../mydata/dec/30//mydata/dec/31/

這太簡單了,你可以在一個URLconf中捕捉這些值,像這樣(使用命名組的方法):

urlpatterns = patterns('',  (r'^mydata/(?P\w{3})/(?P\d\d)/$', views.my_view),)

然後視圖函數的原型看起來會是:

def my_view(request, month, day):  # ....

這種解決方案很直接,沒有用到什麼你沒見過的技術。 當你想添加另外一個使用 my_view 視圖但不包含month和/或者day的URL時,問題就出現了。

比如你可能會想增加這樣一個URL, /mydata/birthday/ , 這個URL等價於 /mydata/jan/06/ 。這時你可以這樣利用額外URLconf參數:

urlpatterns = patterns('',  (r'^mydata/birthday/$', views.my_view, {'month': 'jan', 'day': '06'}),  (r'^mydata/(?P\w{3})/(?P\d\d)/$', views.my_view),)

在這裡最帥的地方莫過於你根本不用改變你的視圖函數。 視圖函數只會關心它 獲得 了 參數,它不會去管這些參數到底是捕捉回來的還是被額外提供的。month和day

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.