diff options
| author | Gagaro <gagaro42@gmail.com> | 2015-11-25 12:17:59 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-11-28 08:44:41 -0500 |
| commit | 08e1c79f7ae574ed27a93e97a0a56c3fcba3aa68 (patch) | |
| tree | 5e3c70e200cc7e64de4721be77b670e6809bf947 | |
| parent | b5ff75dab8f9ffaeaaddc027568cfc7a6d279a04 (diff) | |
[1.9.x] Fixed #25812 -- Restored the ability to use custom formats with the date template filter.
Backport of 34d88944f46d3e2734488fd0ca3c2c24c15a0264 from master
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/utils/formats.py | 8 | ||||
| -rw-r--r-- | docs/releases/1.8.8.txt | 4 | ||||
| -rw-r--r-- | docs/topics/i18n/formatting.txt | 5 | ||||
| -rw-r--r-- | tests/i18n/other/locale/fr/__init__.py | 0 | ||||
| -rw-r--r-- | tests/i18n/other/locale/fr/formats.py | 2 | ||||
| -rw-r--r-- | tests/i18n/tests.py | 5 |
7 files changed, 19 insertions, 6 deletions
@@ -746,6 +746,7 @@ answer newbie questions, and generally made Django that much better: Wilson Miner <wminer@gmail.com> wojtek Xia Kai <http://blog.xiaket.org/> + Yann Fouillat <gagaro42@gmail.com> Yann Malet Yasushi Masuda <whosaysni@gmail.com> ye7cakf02@sneakemail.com diff --git a/django/utils/formats.py b/django/utils/formats.py index 0ae8989409..d09003c72b 100644 --- a/django/utils/formats.py +++ b/django/utils/formats.py @@ -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. """ 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 lang is None: lang = get_language() @@ -120,9 +118,6 @@ def get_format(format_type, lang=None, use_l10n=None): cached = _format_cache[cache_key] if cached is not None: return cached - else: - # Return the general setting by default - return getattr(settings, format_type) except KeyError: for module in get_format_modules(lang): try: @@ -137,6 +132,9 @@ def get_format(format_type, lang=None, use_l10n=None): except AttributeError: pass _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) get_format_lazy = lazy(get_format, six.text_type, list, tuple) diff --git a/docs/releases/1.8.8.txt b/docs/releases/1.8.8.txt index 1a28efe167..94cda25ba2 100644 --- a/docs/releases/1.8.8.txt +++ b/docs/releases/1.8.8.txt @@ -14,3 +14,7 @@ Bugfixes * Corrected ``__len`` query lookup on ``ArrayField`` for empty arrays (: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`). diff --git a/docs/topics/i18n/formatting.txt b/docs/topics/i18n/formatting.txt index 62e4cc9ede..8a96bd74a9 100644 --- a/docs/topics/i18n/formatting.txt +++ b/docs/topics/i18n/formatting.txt @@ -170,7 +170,10 @@ the package where format files will exist, for instance:: ] 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:: diff --git a/tests/i18n/other/locale/fr/__init__.py b/tests/i18n/other/locale/fr/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/i18n/other/locale/fr/__init__.py diff --git a/tests/i18n/other/locale/fr/formats.py b/tests/i18n/other/locale/fr/formats.py new file mode 100644 index 0000000000..d13e245c30 --- /dev/null +++ b/tests/i18n/other/locale/fr/formats.py @@ -0,0 +1,2 @@ +# A user-defined format +CUSTOM_DAY_FORMAT = 'd/m/Y CUSTOM' diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index db16eaf5e2..573a722f56 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -1248,6 +1248,11 @@ class FormattingTests(SimpleTestCase): def test_format_arbitrary_settings(self): 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): |
