更简单的 URLconf

作者:Adrian Holovaty 发布于 2005年11月28日

如果您错过了昨天“一周回顾”条目中的内容,我们对 URLconf 解析系统进行了改进,以便您可以使用非命名组作为命名组的替代方案来指定 URL。

例如,以下是旧的(但仍然支持的)语法

urlpatterns = patterns('',
    (r'^articles/2003/$', 'news.views.special_case_2003'),
    (r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'),
    (r'^articles/(?P<year>\d{4})/(?P<month>\d\d)/$', 'news.views.month_archive'),
    (r'^articles/(?P<year>\d{4})/(?P<month>\d\d)/(?P<day>\d\d)/$', 'news.views.article_detail'),
)

以下是使用新的非命名组语法的等效代码

urlpatterns = patterns('',
    (r'^articles/2003/$', 'news.views.special_case_2003'),
    (r'^articles/(\d{4})/$', 'news.views.year_archive'),
    (r'^articles/(\d{4})/(\d\d)/$', 'news.views.month_archive'),
    (r'^articles/(\d{4})/(\d\d)/(\d\d)/$', 'news.views.article_detail'),
)

要捕获某些内容,只需用括号将其括起来。当然,您仍然可以使用命名组。

如果您的 URLconf 使用非命名组(使用简单的括号,如第二个示例所示),则捕获的值将作为位置参数传递给您的视图——因此您需要确保视图函数的参数与它们在 URL 中出现的顺序相同。如果您的 URLconf 使用命名组(如第一个示例所示),则捕获的值将作为关键字参数传递——因此顺序无关紧要。

阅读完整文档.

感谢 Aaron Swartz 最初提出此改进建议!

返回顶部