উত্তর:
এটি করার দুটি উপায় আছে। সরাসরি দৃষ্টিভঙ্গিটি হ'ল উদাহরণস্বরূপ আপনার টেমপ্লেটে স্ট্রফটাইম () পদ্ধতিটি কল (এবং মুদ্রণ) করা
{{ 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)
(এই ফিল্টারটি আই 18 এন সম্পর্কিত কারণে বাবেলের উপর ভিত্তি করে তৈরি করা হয়েছে তবে আপনি স্ট্রফটাইমও ব্যবহার করতে পারেন)। ফিল্টারটির সুবিধা হ'ল, আপনি লিখতে পারেন
{{ 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)
জিনজা 2 এবং ফ্লাস্কে স্ট্রফটাইমের জন্য যে ফিল্টারটি আমি শেষ করেছি তা এখানে
@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/#custom-filters
যদি আপনি নিম্ন স্তরের সময়ের অবজেক্টের সাথে ডিল করছেন (আমি প্রায়শই কেবল পূর্ণসংখ্যার ব্যবহার করি), এবং যে কোনও কারণেই কাস্টম ফিল্টারটি লিখতে না চাই, আমি যে পদ্ধতির ব্যবহার করি তা হল ভেরিয়েবল হিসাবে টেম্পলেটটিতে স্ট্রফটাইম ফাংশনটি পাস করা, যেখানে যেখানে আপনার এটি প্রয়োজন সেখানে এটি বলা যেতে পারে।
উদাহরণ স্বরূপ:
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') }}
গুগল অ্যাপ ইঞ্জিন ব্যবহারকারীগণ: আপনি যদি জাঙ্গো থেকে জিনজা 2 এ চলে যাচ্ছেন এবং তারিখের ফিল্টারটি প্রতিস্থাপনের জন্য সন্ধান করছেন তবে নোট করুন যে% ফর্ম্যাটিং কোডগুলি আলাদা।
স্ট্রফটাইম% কোডগুলি এখানে রয়েছে: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behaviour
ফ্ল্যাশ, বাবেল সহ, আমি এটি করতে পছন্দ করি:
@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}}
সুতরাং বাবেলের সাথে না আপনি বার্তাগুলিতে আপনার বিভিন্ন বিন্যাস নির্দিষ্ট করতে পারেন can উদাহরণস্বরূপ:
#: app/views.py:36
#, python-format
msgid "%%m/%%d/%%Y"
msgstr "%%d/%%m/%%Y"
একটি জিনজা 2 এক্সটেনশন রয়েছে যা আপনি কেবল পিপ ইনস্টল প্রয়োজন ব্যবহার করতে পারেন ( https://github.com/hackebrot/jinja2-tim )