Django url的幾種使用方式

以下內容是個人的隨手記錄,就是介紹了下簡單的使用;

歡迎大家吐槽,接下來就是激情的時刻,準備好啤酒飲料礦泉水,開整!!!

利用Django開發網站,可以設計出非常優美的url規則,如果url的匹配規則(包含正則表達式)組織得比較好,view的結構就會比較清晰,比較容易維護。
最簡單的形式
[python] view plain copy
  1. <code>  
  2. from django.conf.urls import patterns, url  
  3. urlpatterns = patterns('',  
  4.     url(r'^articles/2003/$''news.views.special_case_2003'),  
  5.     url(r'^articles/(\d{4})/$''news.views.year_archive'),  
  6.     url(r'^articles/(\d{4})/(\d{2})/$''news.views.month_archive'),  
  7.     url(r'^articles/(\d{4})/(\d{2})/(\d+)/$''news.views.article_detail'),  
  8. )</code>  
其中,正則表達式中組匹配出來的結果可以作爲positional parameters傳遞給view.
如果url是www.yourdomain/articles/2005/,則會匹配第二條規則,執行news.views.year_archive('2005').
注意點
  • 域名部分會被過濾掉
  • articles的前面不需要添加/,因爲前序url的末尾一定會有/
  • 任何組匹配的變量,都會議字符串的形式傳遞給view, 雖然通過(\d{4})匹配出了2005,但2005任然會被當做字符串傳遞給year_archive
利用named group來傳遞參數
可以通過以下形式爲特定的組指定一個名稱.
[python] view plain copy
  1. urlpatterns = patterns('',  
  2.     url(r'^articles/2003/$''news.views.special_case_2003'),  
  3.     url(r'^articles/(?P<year>\d{4})/$''news.views.year_archive'),  
  4.     url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$''news.views.month_archive'),  
  5.     url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$''news.views.article_detail'),  
  6. )  

這樣的話,組的匹配結果會通過keyword parameters的形式傳遞給view.例如year_archive(year='2005')

利用named group可以爲view指定一個默認參數來匹配多條規則。
[python] view plain copy
  1. # URLconf  
  2. from django.conf.urls import patterns, url  
  3.   
  4. urlpatterns = patterns('',  
  5.     url(r'^blog/$''blog.views.page'),  
  6.     url(r'^blog/page(?P<num>\d+)/$''blog.views.page'),  
  7. )  
  8.   
  9. # View (in blog/views.py)  
  10. def page(request, num="1"):  
  11.     # Output the appropriate page of blog entries, according to num.  


指定view前綴(提取公因式)
patterns函數的第一個參數即是view的前綴
[python] view plain copy
  1. from django.conf.urls import patterns, url  
  2.   
  3. urlpatterns = patterns('news.views',  
  4.     url(r'^articles/(\d{4})/$''year_archive'),  
  5.     url(r'^articles/(\d{4})/(\d{2})/$''month_archive'),  
  6.     url(r'^articles/(\d{4})/(\d{2})/(\d+)/$''article_detail'),  
  7. )  
指定多個view前綴
[python] view plain copy
  1. urlpatterns = patterns('myapp.views',  
  2.     url(r'^$''app_index'),  
  3.     url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$','month_display'),  
  4. )  
  5. urlpatterns += patterns('weblog.views',  
  6.     url(r'^tag/(?P<tag>\w+)/$''tag'),  
  7. )  

include其它匹配模塊
[python] view plain copy
  1. from django.conf.urls import include, patterns, url  
  2.   
  3. urlpatterns = patterns('',  
  4.     # ... snip ...  
  5.     url(r'^comments/', include('django.contrib.comments.urls')),  
  6.     url(r'^community/', include('django_website.aggregator.urls')),  
  7.     url(r'^contact/', include('django_website.contact.urls')),  
  8.     # ... snip ...  
  9. )  
當然也可以直接include其它patterns
[python] view plain copy
  1. from django.conf.urls import include, patterns, url  
  2.   
  3. extra_patterns = patterns('',  
  4.     url(r'^reports/(?P<id>\d+)/$''credit.views.report'),  
  5.     url(r'^charge/$''credit.views.charge'),  
  6. )  
  7.   
  8. urlpatterns = patterns('',  
  9.     url(r'^$''apps.main.views.homepage'),  
  10.     url(r'^help/', include('apps.help.urls')),  
  11.     url(r'^credit/', include(extra_patterns)),  
  12. )  

爲view函數傳遞額外參數
[python] view plain copy
  1. from django.conf.urls import patterns, url  
  2.   
  3. urlpatterns = patterns('blog.views',  
  4.     url(r'^blog/(?P<year>\d{4})/$''year_archive', {'foo''bar'}),  
  5. )  
直接使用view函數
[python] view plain copy
  1. from django.conf.urls import patterns, url  
  2. from mysite.views import archive, about, contact  
  3.   
  4. urlpatterns = patterns('',  
  5.     url(r'^archive/$', archive),  
  6.     url(r'^about/$', about),  
  7.     url(r'^contact/$', contact),  
  8. )  

搞笑一則:能動手儘量別吵吵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章