diff --git a/combo/manager/templates/combo/page_view.html b/combo/manager/templates/combo/page_view.html
index 2b4d6885..515d8a4d 100644
--- a/combo/manager/templates/combo/page_view.html
+++ b/combo/manager/templates/combo/page_view.html
@@ -152,7 +152,7 @@
{{cell.get_additional_label|default_if_none:""}}
{% if cell.get_invalid_reason %}
{{ cell.get_invalid_reason }} -
- {% if cell.get_validity_info.invalid_datetime|date_in_past %}
+ {% if cell.get_validity_info.invalid_datetime|datetime_in_past %}
{% blocktrans with cell.get_validity_info.invalid_datetime|date:"DATETIME_FORMAT" as invalidity_date %}This cell is no longer displayed since {{ invalidity_date }}.{% endblocktrans %}
{% else %}
{% blocktrans with cell.get_validity_info.invalid_datetime|timeuntil as invalidity_delay %}This cell will no longer be displayed in {{ invalidity_delay }}.{% endblocktrans %}
diff --git a/combo/public/templatetags/combo.py b/combo/public/templatetags/combo.py
index 702494c7..36fbf386 100644
--- a/combo/public/templatetags/combo.py
+++ b/combo/public/templatetags/combo.py
@@ -42,7 +42,7 @@ from django.utils import dateparse, six
from django.utils.encoding import force_text
from django.utils.html import format_html
from django.utils.safestring import mark_safe
-from django.utils.timezone import now
+from django.utils.timezone import is_naive, make_aware
from combo.data.models import Page, Placeholder
from combo.public.menu import get_menu_context
@@ -452,13 +452,16 @@ def age_in_months(value, today=None):
@register.filter(expects_localtime=True)
-def date_in_past(value):
+def datetime_in_past(value):
value = parse_datetime(value)
- try:
- return value <= now()
- except TypeError:
+ if not value:
return False
+ if is_naive(value):
+ value = make_aware(value)
+ date_now = make_aware(datetime.datetime.now())
+ return value <= date_now
+
def parse_decimal(value, default=Decimal(0)):
if isinstance(value, six.string_types):
diff --git a/tests/test_public_templatetags.py b/tests/test_public_templatetags.py
index 6a2a3d40..2489d3e6 100644
--- a/tests/test_public_templatetags.py
+++ b/tests/test_public_templatetags.py
@@ -12,6 +12,7 @@ from django.test import override_settings
from django.test.client import RequestFactory
from django.contrib.auth.models import User, Group, AnonymousUser
from django.utils.six import StringIO
+from django.utils.timezone import now
from combo.data.models import Page, TextCell
from combo.apps.assets.models import Asset
@@ -511,6 +512,37 @@ def test_age_in():
assert tmpl.render(Context(context)) == 'Good'
+@pytest.mark.parametrize('value, expected', [
+ (None, False),
+ ('', False),
+ ('foobar', False),
+ (42, False),
+ ('1970-06-15T12:01:03', True),
+ ('2500-06-15T12:01:02', False),
+ ('1970-01-01 02:03', True),
+ ('2500-01-01 02:03', False),
+ ('01/01/1970 02h03', True),
+ ('01/01/2500 02h03', False),
+ ('1970-01-01', True),
+ ('2500-01-01', False),
+ ('01/01/1970', True),
+ ('01/01/2500', False),
+ (datetime.datetime(1970, 6, 15, 12, 1, 3), True),
+ (datetime.datetime(2500, 6, 15, 12, 1, 2), False),
+ (datetime.date(1970, 6, 15), True),
+ (datetime.date(2500, 6, 15), False),
+ (datetime.datetime.now(), True),
+ (datetime.datetime.now() + datetime.timedelta(hours=1), False),
+ (now(), True),
+ (now() + datetime.timedelta(hours=1), False),
+ (datetime.date.today(), True),
+ (datetime.date.today() + datetime.timedelta(days=1), False),
+])
+def test_datetime_in_past(value, expected):
+ t = Template('{{ value|datetime_in_past }}')
+ assert t.render(Context({'value': value})) == str(expected)
+
+
def test_decimal_templatetag():
tmpl = Template('{{ plop|decimal }}')
assert tmpl.render(Context({'plop': 'toto'})) == '0'