64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
|
from django.template import Library, Node, TemplateSyntaxError
|
||
|
from django.utils import formats
|
||
|
|
||
|
register = Library()
|
||
|
|
||
|
|
||
|
@register.filter(is_safe=False)
|
||
|
def localize(value):
|
||
|
"""
|
||
|
Force a value to be rendered as a localized value,
|
||
|
regardless of the value of ``settings.USE_L10N``.
|
||
|
"""
|
||
|
return str(formats.localize(value, use_l10n=True))
|
||
|
|
||
|
|
||
|
@register.filter(is_safe=False)
|
||
|
def unlocalize(value):
|
||
|
"""
|
||
|
Force a value to be rendered as a non-localized value,
|
||
|
regardless of the value of ``settings.USE_L10N``.
|
||
|
"""
|
||
|
return str(formats.localize(value, use_l10n=False))
|
||
|
|
||
|
|
||
|
class LocalizeNode(Node):
|
||
|
def __init__(self, nodelist, use_l10n):
|
||
|
self.nodelist = nodelist
|
||
|
self.use_l10n = use_l10n
|
||
|
|
||
|
def __repr__(self):
|
||
|
return "<%s>" % self.__class__.__name__
|
||
|
|
||
|
def render(self, context):
|
||
|
old_setting = context.use_l10n
|
||
|
context.use_l10n = self.use_l10n
|
||
|
output = self.nodelist.render(context)
|
||
|
context.use_l10n = old_setting
|
||
|
return output
|
||
|
|
||
|
|
||
|
@register.tag("localize")
|
||
|
def localize_tag(parser, token):
|
||
|
"""
|
||
|
Force or prevents localization of values, regardless of the value of
|
||
|
`settings.USE_L10N`.
|
||
|
|
||
|
Sample usage::
|
||
|
|
||
|
{% localize off %}
|
||
|
var pi = {{ 3.1415 }};
|
||
|
{% endlocalize %}
|
||
|
"""
|
||
|
use_l10n = None
|
||
|
bits = list(token.split_contents())
|
||
|
if len(bits) == 1:
|
||
|
use_l10n = True
|
||
|
elif len(bits) > 2 or bits[1] not in ("on", "off"):
|
||
|
raise TemplateSyntaxError("%r argument should be 'on' or 'off'" % bits[0])
|
||
|
else:
|
||
|
use_l10n = bits[1] == "on"
|
||
|
nodelist = parser.parse(("endlocalize",))
|
||
|
parser.delete_first_token()
|
||
|
return LocalizeNode(nodelist, use_l10n)
|