我有以下网址定义:
url(r'^date-add/(?P<entity_id>\d+)$', views.date_add, name='date_add'),
这允许我使用以下URL调用date_add函数:
/app_name/date-add/<id>
我想解决这个问题,以便约会。例如:
/app_name/date-add/1/2013-04-23
如何编辑我的urls.py定义才能实现此目的?
答案 0 :(得分:2)
您可以像这样定义URL正则表达式:
url(r'^date-add/(?P<entity_id>\d+)/(?P<date>\d{4}-\d{2}-\d{2})/$', views.date_add, name='date_add'),
和视图,显然是
def date_add(request, entity_id, date):
#convert to datetime object from string here.
答案 1 :(得分:1)
通常,您将其分解为与年,月和日相对应的命名参数:
url(r'^date-add/(?P<entity_id>\d+)/(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})/$', views.date_add, name='date_add_with_param'),
然后,您可以使用datetime.date
在视图中构建日期时间,该日期时间应接收year
,month
和day
作为参数。
这是典型的模式,特别是对于存档视图,在您向下钻取时URL可能会更具体 - / archive / 2013 /和/ archive / 2013/11 /可能都是有效的,尽管当然您可能不会也没有一个正则表达式匹配。与单个命名模式regexp karthikr的答案显示相比,它可能会不必要地复杂,然后您可以使用datetime.strptime
进行解析。
在任何一种情况下,如果你愿意,你也可以使用一些限制性更强的正则表达式,比如那些月内不允许使用0,1,2或3以外的第一个数字的正则数。