Package pytils :: Package templatetags :: Module pytils_dt
[hide private]
[frames] | no frames]

Source Code for Module pytils.templatetags.pytils_dt

  1  # -*- coding: utf-8 -*- 
  2  # License: GNU GPL2 
  3  # Author: Pythy <the.pythy@gmail.com> 
  4  """ 
  5  pytils.dt templatetags for Django web-framework 
  6  """ 
  7   
  8  __id__ = __revision__ = "$Id: pytils_dt.py 29 2006-10-21 08:28:27Z the.pythy $" 
  9  __url__ = "$URL: https://pythy.googlecode.com/svn/trunk/pytils/pytils/templatetags/pytils_dt.py $" 
 10   
 11  import time 
 12  from django import template, conf 
 13  from pytils import dt, utils 
 14   
 15  register = template.Library()  #: Django template tag/filter registrator 
 16  encoding = conf.settings.DEFAULT_CHARSET  #: Current charset (sets in Django project's settings) 
 17  debug = conf.settings.DEBUG  #: Debug mode (sets in Django project's settings) 
 18  show_value = getattr(conf.settings, 'PYTILS_SHOW_VALUES_ON_ERROR', False)  #: Show values on errors (sets in Django project's settings) 
 19   
 20  # Если отладка, то показываем 'unknown+сообщение об ошибке'. 
 21  # Если отладка выключена, то можно чтобы при ошибках показывалось 
 22  # значение, переданное фильтру (PYTILS_SHOW_VALUES_ON_ERROR=True) 
 23  # либо пустая строка. 
 24   
 25  if debug: 
 26      default_value = "unknown: %(error)s" 
 27      default_uvalue = u"unknown: %(error)s" 
 28  elif show_value: 
 29      default_value = "%(value)s" 
 30      default_uvalue = u"%(value)s" 
 31  else: 
 32      default_value = "" 
 33      default_uvalue = u"" 
 34   
 35  # -- filters -- 
 36   
37 -def distance_of_time(from_time, accuracy=1):
38 """ 39 Display distance of time from current time. 40 41 Parameter is an accuracy level (deafult is 1). 42 Value must be numeral (i.e. time.time() result) or 43 datetime.datetime (i.e. datetime.datetime.now() 44 result). 45 46 Examples:: 47 {{ some_time|distance_of_time }} 48 {{ some_dtime|distance_of_time:2 }} 49 """ 50 try: 51 res = utils.provide_str( 52 dt.distance_of_time_in_words(from_time, accuracy), 53 encoding, 54 default=default_value) 55 except Exception, err: 56 # because filter must die silently 57 try: 58 default_distance = "%s seconds" % str(int(time.time() - from_time)) 59 except Exception: 60 default_distance = "" 61 res = default_value % {'error': err, 'value': default_distance} 62 return res
63
64 -def ru_strftime(date, format="%d.%m.%Y", inflected_day=False):
65 """ 66 Russian strftime, formats date with given format. 67 68 Value is a date (supports datetime.date and datetime.datetime), 69 parameter is a format (string). For explainings about format, 70 see documentation for original strftime: 71 http://docs.python.org/lib/module-time.html 72 73 Examples:: 74 {{ some_date|ru_strftime:"%d %B %Y, %A" }} 75 """ 76 try: 77 uformat = utils.provide_unicode(format, encoding, default=u"%d.%m.%Y") 78 ures = dt.ru_strftime(uformat, 79 date, 80 inflected=True, 81 inflected_day=inflected_day) 82 res = utils.provide_str(ures, encoding) 83 except Exception, err: 84 # because filter must die silently 85 try: 86 default_date = date.strftime(format) 87 except Exception: 88 default_date = "" 89 res = default_value % {'error': err, 'value': default_date} 90 return res
91
92 -def ru_strftime_inflected(date, format="%d.%m.%Y", inflected_day=True):
93 """ 94 Russian strftime with inflected day, formats date 95 with given format (similar to ru_strftime), 96 also inflects day in proper form. 97 98 Examples:: 99 {{ some_date|ru_strftime_inflected:"in %A (%d %B %Y)" 100 """ 101 return ru_strftime(date, format, inflected_day)
102 103 # -- register filters 104 register.filter('distance_of_time', distance_of_time) 105 register.filter('ru_strftime', ru_strftime) 106 register.filter('ru_strftime_inflected', ru_strftime_inflected) 107