diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 9620d1cb81..a1a3f5f70c 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -15,6 +15,7 @@ from django.template.smartif import IfParser, Literal from django.template.defaultfilters import date from django.utils.encoding import smart_str, smart_unicode from django.utils.safestring import mark_safe +from django.utils import timezone register = Library() @@ -343,7 +344,8 @@ class NowNode(Node): self.format_string = format_string def render(self, context): - return date(datetime.now(), self.format_string) + tzinfo = timezone.get_current_timezone() if settings.USE_TZ else None + return date(datetime.now(tz=tzinfo), self.format_string) class SpacelessNode(Node): def __init__(self, nodelist): diff --git a/tests/modeltests/timezones/tests.py b/tests/modeltests/timezones/tests.py index 5d86e9322e..774595be05 100644 --- a/tests/modeltests/timezones/tests.py +++ b/tests/modeltests/timezones/tests.py @@ -790,6 +790,13 @@ class TemplateTests(BaseDateTimeTests): self.assertTrue(tpl.render(ctx).startswith("2011")) timezone._localtime = None + def test_now_template_tag_uses_current_time_zone(self): + # Regression for #17343 + tpl = Template("{% now \"O\" %}") + self.assertEqual(tpl.render(Context({})), "+0300") + with timezone.override(ICT): + self.assertEqual(tpl.render(Context({})), "+0700") + TemplateTests = override_settings(DATETIME_FORMAT='c', USE_L10N=False, USE_TZ=True)(TemplateTests) #@override_settings(DATETIME_FORMAT='c', USE_L10N=False, USE_TZ=False)