2013-05-02 11 views
12

में timedelta ऑब्जेक्ट प्रदर्शित करना मुझे लगातार dedango टेम्पलेट को एक timedelta ऑब्जेक्ट प्रदर्शित करने में परेशानी हो रही है। मैंने अपने टेम्पलेट में समय फ़िल्टर का उपयोग करने की कोशिश की, लेकिन जब मैं ऐसा करता हूं तो कुछ भी प्रदर्शित नहीं होता है।एक django टेम्पलेट

0: 00:

time datetime.timedelta(0, 38, 132827) 

इस रूप में समय अंतर प्रदर्शित करता है: timedelta वस्तु के रूप में त्रुटि पेज पर इस प्रकार अगर मैं गलत दावा का उपयोग दिखाया गया है 38,132827

मैं केवल दिखाने के लिए चाहते हैं प्रत्येक timedelta ऑब्जेक्ट के लिए घंटे, मिनट, और सेकंड। क्या किसी के पास कोई सुझाव है कि मैं यह कैसे कर सकता हूं?

उत्तर

0

जहां तक ​​मुझे पता है कि आपको लिखना है कि आप इसके लिए अपना टेम्पलेट टैग हैं। नीचे एक मैं Django कोर timesince/timeuntil कोड चाहिए उत्पादन आप क्या कर रहे हैं के बाद कि के आधार पर मनगढ़ंत है है:

@register.simple_tag 
def duration(duration): 
""" 
Usage: {% duration timedelta %} 
Returns seconds duration as weeks, days, hours, minutes, seconds 
Based on core timesince/timeuntil 
""" 

    def seconds_in_units(seconds): 
    """ 
    Returns a tuple containing the most appropriate unit for the 
    number of seconds supplied and the value in that units form. 

    >>> seconds_in_units(7700) 
    (2, 'hour') 
    """ 

     unit_totals = OrderedDict() 

     unit_limits = [ 
         ("week", 7 * 24 * 3600), 
         ("day", 24 * 3600), 
         ("hour", 3600), 
         ("minute", 60), 
         ("second", 1) 
         ] 

     for unit_name, limit in unit_limits: 
      if seconds >= limit: 
       amount = int(float(seconds)/limit) 
       if amount != 1: 
        unit_name += 's' # dodgy pluralisation 
       unit_totals[unit_name] = amount 
       seconds = seconds - (amount * limit) 

     return unit_totals; 


if duration: 
    if isinstance(duration, datetime.timedelta): 
     if duration.total_seconds > 0: 
      unit_totals = seconds_in_units(duration.total_seconds()) 
      return ', '.join([str(v)+" "+str(k) for (k,v) in unit_totals.iteritems()]) 

return 'None' 
2

मैं नहीं वहाँ में बनाया कुछ भी है लगता है, और timedeltas सीधे संपर्क में न आएं उनके घंटे और मिनट के मूल्य। लेकिन इस पैकेज एक timedelta कस्टम फ़िल्टर टैग कि मदद कर सकता है शामिल हैं: http://pydoc.net/Python/django-timedeltafield/0.6.8/

1

आप इसे टेम्पलेट को भेजने से पहले, timedelta वस्तु से माइक्रोसेकंड हटाने की कोशिश कर सकते हैं:

time = time - datetime.timedelta(microseconds=time.microseconds) 
0
from datetime import datetime 

start = datetime.now() 

taken = datetime.now() - start 

str(taken) 

'0:03:08.243773' 

str(taken).split('.')[0] 

'0:03:08' 
+1

कोड केवल जवाब अपने दम पर बहुत उपयोगी नहीं हैं। इससे मदद मिलेगी यदि आप कुछ विवरण जोड़ सकते हैं कि यह कैसे प्रश्न/उत्तर देता है। – SiHa

1

मैं पीछा पीटर सलाह और एक कस्टम टेम्पलेट फिल्टर लिखा था।

यहां दिए गए कदम हैं।

सबसे पहले मैंने कस्टम टेम्पलेट फ़िल्टर बनाने के लिए इस guide का पालन किया।

इस अनुभाग को code layout पर पढ़ना सुनिश्चित करें।

यहाँ

from django import template 

register = template.Library() 

@register.filter() 
def smooth_timedelta(timedeltaobj): 
    """Convert a datetime.timedelta object into Days, Hours, Minutes, Seconds.""" 
    secs = timedeltaobj.total_seconds() 
    timetot = "" 
    if secs > 86400: # 60sec * 60min * 24hrs 
     days = secs // 86400 
     timetot += "{} days".format(int(days)) 
     secs = secs - days*86400 

    if secs > 3600: 
     hrs = secs // 3600 
     timetot += " {} hours".format(int(hrs)) 
     secs = secs - hrs*3600 

    if secs > 60: 
     mins = secs // 60 
     timetot += " {} minutes".format(int(mins)) 
     secs = secs - mins*60 

    if secs > 0: 
     timetot += " {} seconds".format(int(secs)) 
    return timetot 

तब मेरे टेम्पलेट में मैं

{% load smooth_timedelta %} 

{% timedeltaobject|smooth_timedelta %} 

किया मेरी फिल्टर कोड है उदाहरण आउटपुट

enter image description here

संबंधित मुद्दे