2016-12-28 124 views
0

我想将数据转换为字符串模板(为了简化URL) 为此,我做以下操作:转换日期为字符串模板

我URLs.py:

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

我的链接模板:

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

模板端start_date和end_date格式为日期而不是字符串。

但得到

NoReverseMatch在/支付/列表/范围/反向的 与参数 '()' 'export_payment_range_csv' 和关键字参数 '{u'start_date': '',u'end_date ': ''}' 未找到。尝试2种模式: ['condition/export/range/csv /(?P \ d +)/(?P \ d +)/ $', 'payment/export/range/csv /(?P \ d + )/(?P \ d +)/ $']

我做错了什么?

UPDATE:

如果我不这样做在模板上的错误我得到的转换:

NoReverseMatch在/支付/列表/范围/反向的 与参数 'export_payment_range_csv'“( )'和关键字参数 '{u'start_date':datetime.date(2016,2,1),u'end_date': datetime.date(2016,12,31)}'找不到。尝试2种模式: ['condition/export/range/csv /(?P \ d +)/(?P \ d +)/ $', 'payment/export/range/csv /(?P \ d + )/(θP \ d +)/ $']

+0

让你想到什么说'.string'在约会时间是否有效?并且请注意,即使您修复了这个问题,字符串化日期仍然不会匹配'\ d +'正则表达式。 –

+0

谢谢。那么我的出路是什么?我应该在urls.py或...中处理正则表达式? –

+0

我会考虑使用unix时间戳,因为它们很容易被解析。当然,你也可以选择日期时间格式并坚持下去。 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior – 2rs2ts

回答

1

因为\d是一个数字,而你试图返回类型甚至不是 接近。

假设日期是实际上日期,你可以这样做:

start_date=start_date.strftime('%Y-%m-%d') 

,这将给你像2010-08-14。 该表格中的日期的正则表达式应该是\d{4}-\d{2}-\d{2}(尽管这在技术上不能验证日期)。

1

首先,我将更新你的URL的正则表达式如下:

r'^export/range/csv/(?P<start_date>[-\d]+)/(?P<end_date>[-\d]+)/$ 

在templatesystem没有一个.string - 方法你可以使用(除非你已经创建了自己的templatefilter)。所以为了让你的日期对象转换为字符串,你可以使用Django的buildin templatefilter .date。要做到这一点,使用模板生成您的网址如下:

{% url 'export_payment_range_csv' start_date=start_date|date:"Y-m-d" end_date=end_date|date:"Y-m-d" %} 

这将创建格式YYYY-MM-DD的日期字符串。见Django's date-docs here

0

我在正则表达式

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

移动日期字符串,并发送,因为它是从模板中的日期格式

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

它的工作原理