जवाबों:
इसे करने के दो तरीके हैं। प्रत्यक्ष दृष्टिकोण उदाहरण के लिए, अपने टेम्पलेट में स्ट्रैफ़ाइम () विधि को केवल कॉल करना (और प्रिंट करना) होगा
{{ car.date_of_manufacture.strftime('%Y-%m-%d') }}
एक और, दृष्टिगत रूप से बेहतर दृष्टिकोण आपके अपने फ़िल्टर को परिभाषित करना होगा, जैसे:
from flask import Flask
import babel
app = Flask(__name__)
@app.template_filter()
def format_datetime(value, format='medium'):
if format == 'full':
format="EEEE, d. MMMM y 'at' HH:mm"
elif format == 'medium':
format="EE dd.MM.y HH:mm"
return babel.dates.format_datetime(value, format)
(यह फिल्टर i18n से संबंधित कारणों के लिए बेबल पर आधारित है, लेकिन आप स्ट्रैप्टाइम का भी उपयोग कर सकते हैं)। फ़िल्टर का लाभ यह है, कि आप लिख सकते हैं
{{ car.date_of_manufacture|datetime }}
{{ car.date_of_manufacture|datetime('full') }}
जो अच्छा लग रहा है और अधिक बनाए रखने योग्य है। एक और आम फिल्टर "टाइमडेल्टा" फिल्टर भी है, जो "8 मिनट पहले लिखे" जैसे कुछ का मूल्यांकन करता है। आप इसके लिए उपयोग कर सकते हैं babel.dates.format_timedelta
, और इसे दिए गए डेटाइम उदाहरण के समान फ़िल्टर के रूप में पंजीकृत कर सकते हैं।
datetime
अजगर मॉड्यूल से किसी ऑब्जेक्ट को स्वरूपित करने के बारे में था datetime
, लेकिन आप struct_time
निम्न स्तर के time
मॉड्यूल से ऑब्जेक्ट को प्रारूपित करने का प्रयास कर रहे हैं । struct_time
ऑब्जेक्ट में एक strftime()
विधि नहीं होती है , हालांकि strftime()
समय पैकेज में एक वैश्विक विधि हो सकती है । लेकिन मैं आपको datetime
इसके बजाय उच्च स्तर (प्लेटफ़ॉर्म स्वतंत्र) पैकेज का उपयोग करने की सलाह देता हूं ।
babel.dates.format_datetime(value, format)
यहाँ फिल्टर है कि मैं Jinja2 और फ्लास्क में strftime का उपयोग कर समाप्त हो गया
@app.template_filter('strftime')
def _jinja2_filter_datetime(date, fmt=None):
date = dateutil.parser.parse(date)
native = date.replace(tzinfo=None)
format='%b %d, %Y'
return native.strftime(format)
और फिर आप फ़िल्टर का उपयोग इस तरह करते हैं:
{{car.date_of_manufacture|strftime}}
dateutil
और native
?
मुझे लगता है कि आपको इसके लिए अपना फ़िल्टर लिखना होगा। यह वास्तव में दस्तावेज़ीकरण में कस्टम फिल्टर के लिए उदाहरण है: http://jinja.pocoo.org/docs/api/#customerfreeters
यदि आप एक निम्न स्तर समय वस्तु (मैं अक्सर पूर्णांक का उपयोग करते हैं) के साथ काम कर रहे हैं, और जो भी कारण के लिए एक कस्टम फ़िल्टर लिखना नहीं चाहते हैं, मैं जिस दृष्टिकोण का उपयोग करता हूं वह स्ट्रैफ़ाइम फ़ंक्शन को एक चर के रूप में टेम्पलेट में पास करना है, जहां यह कहा जा सकता है जहाँ आपको इसकी आवश्यकता है।
उदाहरण के लिए:
import time
context={
'now':int(time.time()),
'strftime':time.strftime } # Note there are no brackets () after strftime
# This means we are passing in a function,
# not the result of a function.
self.response.write(jinja2.render_template('sometemplate.html', **context))
जो तब उपयोग किया जा सकता है sometemplate.html
:
<html>
<body>
<p>The time is {{ strftime('%H:%M%:%S',now) }}, and 5 seconds ago it was {{ strftime('%H:%M%:%S',now-5) }}.
</body>
</html>
आप इसे बिना किसी फिल्टर के टेम्पलेट में इस तरह से उपयोग कर सकते हैं
{{ car.date_of_manufacture.strftime('%Y-%m-%d') }}
Google App Engine उपयोगकर्ता: यदि आप Django से Jinja2 की ओर बढ़ रहे हैं, और दिनांक फ़िल्टर को बदलने के लिए देख रहे हैं, तो ध्यान दें कि% स्वरूपण कोड भिन्न हैं।
स्ट्रैप्टाइम% कोड यहाँ हैं: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
फ्लास्क में, बैबल के साथ, मुझे यह करना पसंद है:
@app.template_filter('dt')
def _jinja2_filter_datetime(date, fmt=None):
if fmt:
return date.strftime(fmt)
else:
return date.strftime(gettext('%%m/%%d/%%Y'))
के साथ टेम्पलेट में उपयोग किया जाता है {{mydatetimeobject|dt}}
उदाहरण के लिए आप इस तरह से मेसेज में अपना विभिन्न प्रारूप निर्दिष्ट कर सकते हैं।
#: app/views.py:36
#, python-format
msgid "%%m/%%d/%%Y"
msgstr "%%d/%%m/%%Y"
एक jinja2 एक्सटेंशन है जिसका उपयोग आप बस ज़रूरत पिप स्थापित कर सकते हैं ( https://github.com/hackebrot/jinja2-tub )