我想将数据转换为模板中的字符串(以简化网址) 为此,我做了以下:
我的网址:
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;]
答案 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>
它有效