django中的URL模式,第一部分为变量

时间:2017-06-11 06:43:54

标签: django django-urls

很容易创建URL模式,如下所示

url(r'^member/(?P<member_name>[a-z]+)/$', views.get_member, name='get_member'),

这会生成完整的网址http://example.com/member/john/,但我想制作像http://example.com/john/这样的网址。我应该为此制作什么网址格式?如果我做

url(r'^(?P<member_name>[a-z]+)/$', views.get_member, name='get_member'),

它将开始匹配其中的所有其他网址。

1 个答案:

答案 0 :(得分:3)

您正确添加url(r'^(?P<member_name>[a-z]+)/$', views.get_member, name='get_member')等网址将匹配所有网址。重要的是URL出现的顺序。

在您的urls.py文件中,将您的get_member网址放在urls.py网址列表的底部。

这样,它将是最后一个匹配的模式。

例如,以下网址格式将匹配:

  • 物品/
  • 物品/ 2003
  • 约翰/
  • 史蒂夫/

    urlpatterns = [
        url(r'^articles/2003/$', views.special_case_2003),
        url(r'^articles/([0-9]{4})/$', views.year_archive),
        url(r'^(?P<member_name>[a-z]+)/$', views.get_member, name='get_member')
    ]
    

现在可能存在一些您可能会或可能不会注意到的问题。如果用户使用名称articles加入您的网站,该怎么办? Url将匹配第一个url实例。这意味着“article”用户永远无法访问该个人资料。

要解决此问题,您将不得不拥有一些无法使用的受限用户名。您还需要确保添加到站点中的任何新页面与已创建的用户名不冲突。