2013-07-07 09:47:19 +00:00
|
|
|
"""
|
2013-07-07 12:36:47 +00:00
|
|
|
There are currently a few renderers that come directly with django-admin2. They
|
|
|
|
|
are used by default for some field types.
|
2013-07-07 09:47:19 +00:00
|
|
|
"""
|
|
|
|
|
import os.path
|
|
|
|
|
from datetime import date, time, datetime
|
|
|
|
|
|
2013-07-07 10:38:26 +00:00
|
|
|
from django.db import models
|
2016-05-07 23:31:16 +00:00
|
|
|
from django.template.loader import render_to_string
|
2013-07-07 09:47:19 +00:00
|
|
|
from django.utils import formats, timezone
|
2020-09-26 21:21:43 +00:00
|
|
|
from django.utils.encoding import force_str
|
2013-07-07 09:47:19 +00:00
|
|
|
|
|
|
|
|
from djadmin2 import settings
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def boolean_renderer(value, field):
|
|
|
|
|
"""
|
|
|
|
|
Render a boolean value as icon.
|
|
|
|
|
|
|
|
|
|
This uses the template ``renderers/boolean.html``.
|
|
|
|
|
|
|
|
|
|
:param value: The value to process.
|
|
|
|
|
:type value: boolean
|
|
|
|
|
:param field: The model field instance
|
|
|
|
|
:type field: django.db.models.fields.Field
|
|
|
|
|
:rtype: unicode
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
# TODO caching of template
|
|
|
|
|
tpl = os.path.join(settings.ADMIN2_THEME_DIRECTORY, 'renderers/boolean.html')
|
|
|
|
|
return render_to_string(tpl, {'value': value})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def datetime_renderer(value, field):
|
|
|
|
|
"""
|
|
|
|
|
Localize and format the specified date.
|
|
|
|
|
|
|
|
|
|
:param value: The value to process.
|
|
|
|
|
:type value: datetime.date or datetime.time or datetime.datetime
|
|
|
|
|
:param field: The model field instance
|
|
|
|
|
:type field: django.db.models.fields.Field
|
|
|
|
|
:rtype: unicode
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
if isinstance(value, datetime):
|
2015-03-30 17:50:08 +00:00
|
|
|
# django ticket #23466 Removing seconds from locale formats
|
2013-07-07 09:47:19 +00:00
|
|
|
return formats.localize(timezone.template_localtime(value))
|
|
|
|
|
elif isinstance(value, (date, time)):
|
2015-03-30 17:50:08 +00:00
|
|
|
return ":".join((formats.localize(value)).split(":")[:2])
|
2013-07-07 09:47:19 +00:00
|
|
|
else:
|
2015-03-30 17:50:08 +00:00
|
|
|
return ":".join(value.split(":")[:2])
|
2013-07-07 09:47:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def title_renderer(value, field):
|
|
|
|
|
"""
|
|
|
|
|
Render a string in title case (capitalize every word).
|
|
|
|
|
|
|
|
|
|
:param value: The value to process.
|
|
|
|
|
:type value: str or unicode
|
|
|
|
|
:param field: The model field instance
|
|
|
|
|
:type field: django.db.models.fields.Field
|
2014-09-28 23:20:36 +00:00
|
|
|
:rtype: unicode or str
|
2013-07-07 09:47:19 +00:00
|
|
|
|
|
|
|
|
"""
|
2020-09-26 21:21:43 +00:00
|
|
|
return force_str(value).title()
|
2013-07-07 10:38:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def number_renderer(value, field):
|
|
|
|
|
"""
|
|
|
|
|
Format a number.
|
|
|
|
|
|
|
|
|
|
:param value: The value to process.
|
|
|
|
|
:type value: float or long
|
|
|
|
|
:param field: The model field instance
|
|
|
|
|
:type field: django.db.models.fields.Field
|
|
|
|
|
:rtype: unicode
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
if isinstance(field, models.DecimalField):
|
|
|
|
|
return formats.number_format(value, field.decimal_places)
|
|
|
|
|
return formats.number_format(value)
|