将日期转换为模板中的字符串

时间:2016-12-28 17:20:11

标签: python regex django

我想将数据转换为模板中的字符串(以简化网址) 为此,我做了以下:

我的网址:

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 at / payment / list / range / Reverse for   &#39; export_payment_range_csv&#39;参数&#39;()&#39;和关键字参数   &#39; {u&#39; start_date&#39;:&#39;&#39;,u&#39; end_date&#39;:&#39;&#39;}&#39;未找到。尝试了2种模式:   [&#39;条件/出口/范围/ CSV /(ΔP\ d +)/(ΔP\ d +)/ $&#39 ;,   &#39;付款/出口/范围/ CSV /(P \ d +?)/(P \ d +?)/ $&#39;]

我做错了什么?

更新:

当我没有在模板端进行转换错误时,我得到了:

  

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

3 个答案:

答案 0 :(得分:1)

因为\d是一个数字,并且您尝试返回的类型不均匀 接近那个。

假设日期实际日期,您可以这样做:

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

这将为您提供类似2010-08-14的内容。  该表单中日期的正则表达式为\d{4}-\d{2}-\d{2}(尽管这在技术上并未验证日期)。

答案 1 :(得分:1)

首先,我会将您网址中的正则表达式更新为以下内容:

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

在模板系统中,您不能使用.string - 方法(除非您已创建自己的模板过滤器)。因此,要将日期对象转换为字符串,可以使用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

答案 2 :(得分: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>

它有效