Opened 6 years ago
Closed 3 years ago
#30086 closed Cleanup/optimization (fixed)
Make floatformat template filter independent of USE_L10N and allow forcing unlocalized format.
Reported by: | Meiyer | Owned by: | Mariusz Felisiak |
---|---|---|---|
Component: | Template system | Version: | 1.11 |
Severity: | Normal | Keywords: | |
Cc: | Florian Demmer, Carsten Fuchs | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Specifically, when the filter is used within the {% localize [on|off] %}
block with the localization setting opposed to the value of USE_L10N
('on' when USE_L10N = False
or 'off' when USE_L10N = True
), the localization setting has not effect.
This is due to the use of formats.number_format()
without its use_l10n
parameter, by the numberformat
template filter (e.g. https://github.com/django/django/blob/c2c85663e2dd06c9ed9c9ec2d02202d6d668d7f0/django/template/defaultfilters.py#L144, https://github.com/django/django/blob/c2c85663e2dd06c9ed9c9ec2d02202d6d668d7f0/django/template/defaultfilters.py#L163). The value of the use_l10n
parameter shall be taken out of the template rendering context. But I do not see any easy solution to this, as filters do not take context...
Change History (15)
follow-up: 2 comment:1 by , 6 years ago
Component: | Template system → Documentation |
---|---|
Description: | modified (diff) |
Summary: | The numberformat template filter does not respect local localization settings → Document how floatformat template filter interacts with the localize template tag |
Triage Stage: | Unreviewed → Accepted |
Type: | Bug → Cleanup/optimization |
follow-up: 4 comment:2 by , 6 years ago
Replying to Tim Graham:
As long as the behavior doesn't contract existing documentation, perhaps the solution is the document the current behavior.
Documenting would be better than nothing, but this behavior goes against the principle of least astonishment. Finding a way to honor the localize directive would be better. Any other filters that are affected by this limitation?
comment:3 by , 6 years ago
All filters are affected. As the reporter noticed, the filters are currently not aware of the rendering context. That's no easy fix.
comment:4 by , 6 years ago
Replying to Marc Parizeau:
this behavior goes against the principle of least astonishment
+1
I consider this as a bug in the implementation of the filter, even though the original title of the ticket was modified by Tim. Why would something inside a {% localize off %}
block still keep being localised?.. I actually opened this ticket after having to dig through Django's code and adding debug statements to understand what was happening.
Going forward, I see only two possible solutions:
- either introduce for filters a non-breaking support for context (meaning, filters will be able to take context without breaking existing code),
- or, deprecate the
floatformat
filter (and possibly other), replacing it (them) with tags.
I personally favour the first option, but I realise it will require a lot of effort.
comment:5 by , 6 years ago
In my 10 years of work with Django, I don't recall another report of this issue, so I doubt that such disruptive changes would be acceptable for what I perceive as a relatively minor issue. You're welcome to make your proposal on the DevelopersMailingList to try to gather a consensus. A custom floatformat
template tag may meet your needs, but deprecating the filter seems a bit drastic for the 99% of users who aren't affected by this issue.
comment:6 by , 6 years ago
Did someone explore adding support for @register.filter(takes_context=True)
. If someone can produce some proof-of-concept code, it may have a chance to get accepted.
comment:7 by , 5 years ago
Cc: | added |
---|
comment:8 by , 4 years ago
Cc: | added |
---|
comment:9 by , 3 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
Triage Stage: | Accepted → Unreviewed |
Closing as a duplicate of #32873 — which will remove the USE_L10N setting.
follow-up: 11 comment:10 by , 3 years ago
Mariusz, I do not see how Claude’s PR resolves the problem discussed in this ticket. The floatformat
builtin filter will still return a localised result irrespective of the {% localize off %}
tag. This is not yet documented in https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#floatformat.
comment:11 by , 3 years ago
Resolution: | duplicate |
---|---|
Status: | closed → new |
Triage Stage: | Unreviewed → Accepted |
Replying to Meiyer:
Mariusz, I do not see how Claude’s PR resolves the problem discussed in this ticket. The
floatformat
builtin filter will still return a localised result irrespective of the{% localize off %}
tag. This is not yet documented in https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#floatformat.
True, we can still document that floatformat
ignores {% localize on|off %}
.
comment:13 by , 3 years ago
Component: | Documentation → Template system |
---|---|
Summary: | Document how floatformat template filter interacts with the localize template tag → Make floatformat template filter independent of USE_L10N and allow forcing unlocalized format. |
comment:14 by , 3 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
As long as the behavior doesn't contract existing documentation, perhaps the solution is the document the current behavior.