Django URL 分發


- url  =>  views函數調用(位置參數)

urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/([0-9]{4})/$', views.year_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

/articles/2005/03/     =>  views.month_archive(request, '2005', '03')
/articles/2005/3/      =>  error: 需要匹配兩位整數
/articles/2003/        =>  views.special_case_2003(request)
/articles/2003         =>  error: 需要以/結束 
/articles/2003/03/03/  =>  views.article_detail(request, '2003', '03', '03')

- url  =>  views函數調用(命名參數 (?P<name>pattern))

urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]

/articles/2005/03/     =>  views.month_archive(request, year='2005', month='03')
/articles/2003/03/03/  =>  views.article_detail(request, year='2003', month='03', day='03')

- url中所有捕獲的參數以string形式傳遞

- 在view中爲url設置默認參數
urlpatterns = [
    url(r'^blog/$', views.page),
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]

# blog/views.py
def page(request, num="1"):  # 爲第一個匹配模式設置默認值

- 傳遞額外參數到view函數
urlpatterns = [
    url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
]

/blog/2005/        =>  views.year_archive(request, year='2005', foo='bar')

- Django快捷函數
render(request, template_name, context=None, context_instance=_context_instance_undefined, content_type=None, 
status=None, current_app=_current_app_undefined, dirs=_dirs_undefined, using=None)

render_to_response(template_name, context=None, context_instance=_context_instance_undefined, content_type=None, 
status=None, dirs=_dirs_undefined, using=None)

redirect(to, permanent=False, *args, **kwargs)

get_object_or_404(klass, *args, **kwargs)

get_list_or_404(klass, *args, **kwargs)


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