misc: extend |date filter to support more input types (#25976)

This commit is contained in:
Frédéric Péters 2018-08-30 20:51:58 +02:00
parent c29d4735ca
commit 12a413ab34
2 changed files with 38 additions and 0 deletions

View File

@ -716,3 +716,32 @@ def test_form_digest_date(pub):
formdata.data = {'0': time.strptime('2015-05-12', '%Y-%m-%d')}
formdata.store()
assert formdef.data_class().get(formdata.id).digest == 'plop 12/05/2015 plop'
formdef.digest_template = 'plop {{ form_var_date|date:"Y" }} plop'
formdef.store()
formdata = formdef.data_class()()
formdata.data = {'0': time.strptime('2015-05-12', '%Y-%m-%d')}
formdata.store()
assert formdef.data_class().get(formdata.id).digest == 'plop 2015 plop'
formdef.digest_template = 'plop {{ form_var_date_raw|date:"Y" }} plop'
formdef.store()
formdata = formdef.data_class()()
formdata.data = {'0': time.strptime('2015-05-12', '%Y-%m-%d')}
formdata.store()
assert formdef.data_class().get(formdata.id).digest == 'plop 2015 plop'
formdef.digest_template = 'plop {{ form_var_date|date:"Y" }} plop'
formdef.store()
formdata = formdef.data_class()()
formdata.data = {'0': None}
formdata.store()
assert formdef.data_class().get(formdata.id).digest == 'plop plop'
# check there's no crash when an invaliad variable is given
formdef.digest_template = 'plop {{ blah|date:"Y" }} plop'
formdef.store()
formdata = formdef.data_class()()
formdata.data = {'0': time.strptime('2015-05-12', '%Y-%m-%d')}
formdata.store()
assert formdef.data_class().get(formdata.id).digest == 'plop plop'

View File

@ -14,7 +14,10 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
import datetime
from django import template
from django.template import defaultfilters
from django.utils import dateparse
from django.utils.safestring import mark_safe
from wcs.qommon import evalutils
@ -66,6 +69,12 @@ def parse_time(time_string):
except (ValueError, TypeError):
return None
@register.filter(expects_localtime=True, is_safe=False)
def date(value, arg=None):
if not isinstance(value, (datetime.datetime, datetime.date, datetime.time)):
value = parse_date(value)
return defaultfilters.date(value, arg=arg)
@register.simple_tag
def standard_text(text_id):
return mark_safe(TextsDirectory.get_html_text(str(text_id)))