common_tags.py 2.2 KB
Newer Older
W
wangyong 已提交
1 2 3 4
# ~*~ coding: utf-8 ~*~

from django import template
from django.utils import timezone
baltery's avatar
baltery 已提交
5
from django.utils.translation import gettext as _
6
from django.utils.html import escape
baltery's avatar
baltery 已提交
7
from django import forms
W
wangyong 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

register = template.Library()


@register.filter
def join_queryset_attr(queryset, attr, delimiter=', '):
    return delimiter.join([getattr(obj, attr, '') for obj in queryset])


@register.filter
def pagination_range(total_page, current_num=1, display=5):
    """Return Page range

    :param total_page: Total numbers of paginator
    :param current_num: current display page num
    :param display: Display as many as [:display:] page

    In order to display many page num on web like:
    < 1 2 3 4 5 >
    """
    try:
        current_num = int(current_num)
    except ValueError:
        current_num = 1

33 34 35 36 37 38 39
    half_display = int(display/2)
    start = current_num - half_display if current_num > half_display else 1
    if start + display <= total_page:
        end = start + display
    else:
        end = total_page + 1
        start = end - display if end > display else 1
W
wangyong 已提交
40

baltery's avatar
baltery 已提交
41 42 43 44 45 46 47 48 49 50
    return range(start, end)


@register.filter
def join_attr(seq, attr=None, sep=None):
    if sep is None:
        sep = ', '
    if attr is not None:
        seq = [getattr(obj, attr) for obj in seq]
    return sep.join(seq)
江世峰 已提交
51

baltery's avatar
baltery 已提交
52

江世峰 已提交
53
@register.filter
baltery's avatar
baltery 已提交
54
def int_to_str(value):
55 56 57 58 59 60 61
    return str(value)


@register.filter
def ts_to_date(ts):
    try:
        ts = float(ts)
baltery's avatar
baltery 已提交
62
    except (TypeError, ValueError):
63 64 65 66 67 68 69 70 71
        ts = 0
    dt = timezone.datetime.fromtimestamp(ts).\
        replace(tzinfo=timezone.get_current_timezone())
    return dt.strftime('%Y-%m-%d %H:%M:%S')


@register.filter
def to_html(s):
    return escape(s).replace('\n', '<br />')
baltery's avatar
baltery 已提交
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86


@register.filter
def time_util_with_seconds(date_from, date_to):
    if date_from and date_to:
        delta = date_to - date_from
        seconds = delta.seconds
        if seconds < 60:
            return '{} s'.format(seconds)
        elif seconds < 60*60:
            return '{} m'.format(seconds//60)
        else:
            return '{} h'.format(seconds//3600)
    else:
        return ''
baltery's avatar
baltery 已提交
87 88 89 90 91 92 93 94


@register.filter
def is_bool_field(field):
    if isinstance(field, forms.BooleanField):
        return True
    else:
        return False