summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGagaro <gagaro42@gmail.com>2015-11-25 12:17:59 +0100
committerTim Graham <timograham@gmail.com>2015-11-28 08:38:45 -0500
commit34d88944f46d3e2734488fd0ca3c2c24c15a0264 (patch)
tree2d43cdb45ba4f863d05a7f724e8bdf936636f664
parentab33269b00858de7c37196a1ea044ce2080fd852 (diff)
Fixed #25812 -- Restored the ability to use custom formats with the date template filter.
-rw-r--r--AUTHORS1
-rw-r--r--django/utils/formats.py8
-rw-r--r--docs/releases/1.8.8.txt4
-rw-r--r--docs/topics/i18n/formatting.txt5
-rw-r--r--tests/i18n/other/locale/fr/__init__.py0
-rw-r--r--tests/i18n/other/locale/fr/formats.py2
-rw-r--r--tests/i18n/tests.py5
7 files changed, 19 insertions, 6 deletions
diff --git a/AUTHORS b/AUTHORS
index 6a4f2e5d6d..5d67d66457 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -749,6 +749,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 8334682e68..9d50f29755 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 8f04d65c38..1b7647d1d6 100644
--- a/docs/topics/i18n/formatting.txt
+++ b/docs/topics/i18n/formatting.txt
@@ -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
-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 fd332c596e..7b387cd15b 100644
--- a/tests/i18n/tests.py
+++ b/tests/i18n/tests.py
@@ -1252,6 +1252,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):