以下內容是個人的隨手記錄,就是介紹了下簡單的使用;
歡迎大家吐槽,接下來就是激情的時刻,準備好啤酒飲料礦泉水,開整!!!
利用Django開發網站,可以設計出非常優美的url規則,如果url的匹配規則(包含正則表達式)組織得比較好,view的結構就會比較清晰,比較容易維護。
最簡單的形式
- <code>
- from django.conf.urls import patterns, url
- urlpatterns = patterns('',
- url(r'^articles/2003/$', 'news.views.special_case_2003'),
- url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
- url(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
- url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
- )</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來傳遞參數
可以通過以下形式爲特定的組指定一個名稱.
- urlpatterns = patterns('',
- url(r'^articles/2003/$', 'news.views.special_case_2003'),
- url(r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'),
- url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive'),
- url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$', 'news.views.article_detail'),
- )
這樣的話,組的匹配結果會通過keyword parameters的形式傳遞給view.例如
year_archive(year='2005')
利用named group可以爲view指定一個默認參數來匹配多條規則。
- # URLconf
- from django.conf.urls import patterns, url
- urlpatterns = patterns('',
- url(r'^blog/$', 'blog.views.page'),
- url(r'^blog/page(?P<num>\d+)/$', 'blog.views.page'),
- )
- # View (in blog/views.py)
- def page(request, num="1"):
- # Output the appropriate page of blog entries, according to num.
指定view前綴(提取公因式)
patterns函數的第一個參數即是view的前綴
- from django.conf.urls import patterns, url
- urlpatterns = patterns('news.views',
- url(r'^articles/(\d{4})/$', 'year_archive'),
- url(r'^articles/(\d{4})/(\d{2})/$', 'month_archive'),
- url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'),
- )
指定多個view前綴
- urlpatterns = patterns('myapp.views',
- url(r'^$', 'app_index'),
- url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$','month_display'),
- )
- urlpatterns += patterns('weblog.views',
- url(r'^tag/(?P<tag>\w+)/$', 'tag'),
- )
include其它匹配模塊
- from django.conf.urls import include, patterns, url
- urlpatterns = patterns('',
- # ... snip ...
- url(r'^comments/', include('django.contrib.comments.urls')),
- url(r'^community/', include('django_website.aggregator.urls')),
- url(r'^contact/', include('django_website.contact.urls')),
- # ... snip ...
- )
當然也可以直接include其它patterns
- from django.conf.urls import include, patterns, url
- extra_patterns = patterns('',
- url(r'^reports/(?P<id>\d+)/$', 'credit.views.report'),
- url(r'^charge/$', 'credit.views.charge'),
- )
- urlpatterns = patterns('',
- url(r'^$', 'apps.main.views.homepage'),
- url(r'^help/', include('apps.help.urls')),
- url(r'^credit/', include(extra_patterns)),
- )
爲view函數傳遞額外參數
- from django.conf.urls import patterns, url
- urlpatterns = patterns('blog.views',
- url(r'^blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}),
- )
直接使用view函數
- from django.conf.urls import patterns, url
- from mysite.views import archive, about, contact
- urlpatterns = patterns('',
- url(r'^archive/$', archive),
- url(r'^about/$', about),
- url(r'^contact/$', contact),
- )
搞笑一則:能動手儘量別吵吵