Convert string to date django template

Viewed 3829

I'm trying to convert string to date in template using template tag but it doesn't work

{% load templat_tag_file %}  
<input name="range2" type="date" {% if request.GET.range2 %}
value="{{ request.GET.range2|convert_str_date }}"{% endif %}/>

my templat_tag_file.py :

from datetime import datetime
register = template.Library()
@register.filter
def convert_str_date(value):
    return datetime.strptime(value, '%Y-%m-%d').date()

I got this error: time data '' does not match format '%Y-%m-%d'

2 Answers

You can't assign a python date object to <input type="date">. you need to convert it to string:

from datetime import datetime
register = template.Library()
@register.filter
def convert_str_date(value):
    return str(datetime.strptime(value, '%Y-%m-%d').date())

also as @quick mentions you need to use request.GET instead request.Get

{% load templat_tag_file %}  
<input name="range2" type="date" {% if request.GET.range2 %}
value="{{ request.GET.range2|convert_str_date }}"{% endif %}/>

Update:

You don't need to define templatetag, if the format is like 1988-02-22, this will work:

<input name="range2" type="date" value="{{ request.GET.range2 }}" />

<input name="range2" type="date" value="1988-02-22" />

You do not provide enough information. I guess you should use request.GET instead request.Get:

{% load templat_tag_file %}  
<input name="range2" type="date" {% if request.GET.range2 %}
value="{{ request.GET.range2|convert_str_date }}"{% endif %}/>
Related