Fixed #25812 -- Restored the ability to use custom formats with the date template filter.

This commit is contained in:
Gagaro 2015-11-25 12:17:59 +01:00 committed by Tim Graham
parent ab33269b00
commit 34d88944f4
7 changed files with 19 additions and 6 deletions

View File

@ -749,6 +749,7 @@ answer newbie questions, and generally made Django that much better:
Wilson Miner <wminer@gmail.com> Wilson Miner <wminer@gmail.com>
wojtek wojtek
Xia Kai <http://blog.xiaket.org/> Xia Kai <http://blog.xiaket.org/>
Yann Fouillat <gagaro42@gmail.com>
Yann Malet Yann Malet
Yasushi Masuda <whosaysni@gmail.com> Yasushi Masuda <whosaysni@gmail.com>
ye7cakf02@sneakemail.com ye7cakf02@sneakemail.com

View File

@ -110,8 +110,6 @@ def get_format(format_type, lang=None, use_l10n=None):
be localized (or not), overriding the value of settings.USE_L10N. be localized (or not), overriding the value of settings.USE_L10N.
""" """
format_type = force_str(format_type) format_type = force_str(format_type)
if format_type not in FORMAT_SETTINGS:
return format_type
if use_l10n or (use_l10n is None and settings.USE_L10N): if use_l10n or (use_l10n is None and settings.USE_L10N):
if lang is None: if lang is None:
lang = get_language() lang = get_language()
@ -120,9 +118,6 @@ def get_format(format_type, lang=None, use_l10n=None):
cached = _format_cache[cache_key] cached = _format_cache[cache_key]
if cached is not None: if cached is not None:
return cached return cached
else:
# Return the general setting by default
return getattr(settings, format_type)
except KeyError: except KeyError:
for module in get_format_modules(lang): for module in get_format_modules(lang):
try: try:
@ -137,6 +132,9 @@ def get_format(format_type, lang=None, use_l10n=None):
except AttributeError: except AttributeError:
pass pass
_format_cache[cache_key] = None _format_cache[cache_key] = None
if format_type not in FORMAT_SETTINGS:
return format_type
# Return the general setting by default
return getattr(settings, format_type) return getattr(settings, format_type)
get_format_lazy = lazy(get_format, six.text_type, list, tuple) get_format_lazy = lazy(get_format, six.text_type, list, tuple)

View File

@ -14,3 +14,7 @@ Bugfixes
* Corrected ``__len`` query lookup on ``ArrayField`` for empty arrays * Corrected ``__len`` query lookup on ``ArrayField`` for empty arrays
(:ticket:`25772`). (:ticket:`25772`).
* Restored the ability to use custom formats from ``formats.py`` with
``django.utils.formats.get_format()`` and the ``date`` template filter
(:ticket:`25812`).

View File

@ -164,7 +164,10 @@ the package where format files will exist, for instance::
] ]
Files are not placed directly in this directory, but in a directory named as Files are not placed directly in this directory, but in a directory named as
the locale, and must be named ``formats.py``. the locale, and must be named ``formats.py``. Be careful not to put sensitive
information in these files as values inside can be exposed if you pass the
string to ``django.utils.formats.get_format()`` (used by the :tfilter:`date`
template filter).
To customize the English formats, a structure like this would be needed:: To customize the English formats, a structure like this would be needed::

View File

View File

@ -0,0 +1,2 @@
# A user-defined format
CUSTOM_DAY_FORMAT = 'd/m/Y CUSTOM'

View File

@ -1252,6 +1252,11 @@ class FormattingTests(SimpleTestCase):
def test_format_arbitrary_settings(self): def test_format_arbitrary_settings(self):
self.assertEqual(get_format('DEBUG'), 'DEBUG') self.assertEqual(get_format('DEBUG'), 'DEBUG')
def test_get_custom_format(self):
with self.settings(FORMAT_MODULE_PATH='i18n.other.locale'):
with translation.override('fr', deactivate=True):
self.assertEqual('d/m/Y CUSTOM', get_format('CUSTOM_DAY_FORMAT'))
class MiscTests(SimpleTestCase): class MiscTests(SimpleTestCase):