6

我试图理解这一行:url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),来自Django's tutorial on how to create views。

特别是,我不明白以下内容:

  • ?P
  • \d+
  • 名称='详细信息'

网址.py

urlpatterns = patterns('',
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)
4

1 回答 1

9
  • (?P<poll_id>...)创建一个命名组;您现在可以按名称引用该组中匹配的任何内容。

    视图将在调用时通过该名称传递一个关键字参数。

  • \d是一个字符组,它匹配数字(0通过 to9用于 ASCII 数据)。是+量词;只有 1 个或多个数字会匹配。

  • name='detail'命名 URL 模式,以便您以后在创建反向 URL 时可以通过名称引用它。请参阅Django 手册中的命名 URL 模式

总而言之,该模式匹配一​​个以数字开头,后跟一个/斜杠的 URL,导致 Django 调用views.detail视图,并将匹配的数字作为poll_id参数传递。name关键字可以很容易地生成此视图的 URL :

{% url 'name' poll.id %}

将生成一个 URL 到http://yourserver/[digits of poll.id]/.

于 2013-06-05T20:13:50.400 回答