尝试在url中使用正则表达式匹配日期时的NoReverseMatch

时间:2016-12-28 07:17:58

标签: django

在我的网址中,我希望获得2个日期作为输入:

url(r'^export/range/csv/(?P<start_date>\d+)/(?P<end_date>\d+)/$', views.export_payment_range_csv, name="export_payment_range_csv"),

但我收到错误:

  

NoReverseMatch at / payment / list / range / Reverse for   带有参数'()'和关键字参数的'export_payment_range_csv'   '{u'start_date':datetime.date(2016,2,1),u'end_date':   datetime.date(2016,12,31)}'找不到。尝试了2种模式:   [ '条件/出口/范围/ CSV /(ΔP\ d +)/(ΔP\ d +)/ $',   '付款/出口/范围/ CSV /(ΔP\ d +)/(ΔP\ d +)/ $']

我认为这与我的URL文件中的正则表达式有关。 我做错了什么?

更新: 我访问的网址

<li><a href="{% url 'export_payment_range_csv' start_date=start_date  end_date=end_date %}">CSV for current range payments</a>

当我从视图模板渲染期间获得开始日期和结束日期时。

我期待观点方面的日期

 payment_list = LeasePaymentFilter(request.GET, queryset=LeasePayment.objects.filter(payment_date__range=[start_date, end_date]))

1 个答案:

答案 0 :(得分:3)

您的网址参数需要数字(\d+),例如:

reverse("export_payment_range_csv", kwargs={
    'start_date': '123', 
    'end_date': '456',
})

但您传递datetime.date个实例:

reverse("export_payment_range_csv", kwargs={
    'start_date': d1, 
    'end_date': d2,
})

检查视图本身(函数views.export_payment_range_csv())并查看参数的预期格式,并生成所需的字符串,例如:

def format_my_date(d):
     return d.strftime("%Y%m%d")

reverse("export_payment_range_csv", kwargs={
    'start_date': format_my_date(d1), 
    'end_date': format_my_date(d2),
})