ãã©ã¹ã³ã¡ã¬ãã¥ãŒããªã¢ã«ãããŒãXIIïŒæ¥ä»ãšæå»ïŒ2018幎çïŒ
ãã²ã«ã»ã°ãªã³ããŒã°
ããã¯ãFlask Mega-Tutorialã·ãªãŒãºã®ç¬¬12éšã§ãããã®ã·ãªãŒãºã§ã¯ããŠãŒã¶ãŒãçŸåšã®ã¿ã€ã ãŸãŒã³ã«äŸåããªãããã«ãæ¥ä»ãšæå»ãæäœããæ¹æ³ã説æããŸãã
åèãŸã§ã«ã以äžã¯ãã®ã·ãªãŒãºã®èšäºã®ãªã¹ãã§ãã
- 第1ç« ïŒHello worldïŒ
- 第2ç« ïŒãã³ãã¬ãŒã
- 第3ç« ïŒWebãã©ãŒã
- 第4ç« ïŒããŒã¿ããŒã¹
- 第5ç« ïŒãŠãŒã¶ãŒãã°ã€ã³
- 第6ç« ïŒãããã£ãŒã«ããŒãžãšã¢ãã¿ãŒ
- 第7ç« ïŒãšã©ãŒåŠç
- 第8ç« ïŒãµãã¹ã¯ã©ã€ããŒãé£çµ¡å ãããã³ãã¬ã³ã
- 第9ç« ïŒããŒãžããŒã·ã§ã³
- 第10ç« ïŒã¡ãŒã«ãµããŒã
- 第11ç« ïŒåæ§æ
- 第12ç« ïŒæ¥ä»ãšæå» ïŒãã®èšäºïŒ
- 第13ç« ïŒI18nããã³L10n
- 第14ç« ïŒAjax
- 第15ç« ïŒã¢ããªã±ãŒã·ã§ã³æ§é ã®æ¹å
- 第16ç« ïŒå šææ€çŽ¢
- 第17ç« ïŒLinuxã®å±é
- 第18ç« ïŒHerokuã§ã®å±é
- 第19ç« ïŒDockerã³ã³ãããŒã§ã®å±é
- 第20ç« ïŒJavaScriptããžãã¯
- 第21ç« ïŒãŠãŒã¶ãŒéç¥
- 第22ç« ïŒããã¯ã°ã©ãŠã³ãã¿ã¹ã¯
- 第23ç« ïŒã¢ããªã±ãŒã·ã§ã³ããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ã€ã¹ïŒAPIïŒ
泚1ïŒãã®ã³ãŒã¹ã®å€ãããŒãžã§ã³ããæ¢ãã®å Žåã¯ããã¡ããã芧ãã ãã ã
泚2ïŒç§ïŒãã²ã«ïŒã®ä»äºãæ¯æããŠçªç¶å£°ãããããå ŽåããŸãã¯1é±éèšäºãåŸ ã€å¿èããªãå Žåãç§ïŒãã²ã«ã°ãªãŒã³ããŒã°ïŒã¯ãã®ã¬ã€ãã®å®å šçïŒè±èªïŒãé»åæžç±ãŸãã¯ãããªã®åœ¢åŒã§æäŸããŸãã 詳现ã«ã€ããŠã¯ã learn.miguelgrinberg.comãã芧ãã ãã ã
é·ãéç¡èŠããŠããç§ã®ãã€ã¯ãããã°ã¢ããªã±ãŒã·ã§ã³ã®1ã€ã®åŽé¢ã¯ãæ¥ä»ãšæå»ã®è¡šç€ºã§ãã ãããŸã§ã®ãšãããPythonã«User
ã¢ãã«ã®datetime
ãªããžã§ã¯ãããããããã Post
ã¢ãã«ã§ã¯ãããå®å
šã«ç¡èŠãããŸããã
ãã®ç« ã®GitHubãªã³ã¯ïŒ Browse ã Zip ã Diff ã
å°çã®ã¿ã€ã ãŸãŒã³
ãµãŒããŒã§Pythonæ©èœã䜿çšããŠãWebãã©ãŠã¶ãŒã§ãŠãŒã¶ãŒã«è¡šç€ºãããæ¥ä»ãšæå»ã衚瀺ããããšã¯ãå§ãã§ããŸããã 次ã®äŸãèããŠã¿ãŸãããã ç§ã¯ããã2017幎9æ28æ¥16:06ã«æžããŠããŸãããããæžããŠããéã®ç§ã®ã¿ã€ã ãŸãŒã³ã¯PDTïŒãŸãã¯å¿ èŠã«å¿ããŠUTC-7ïŒã§ãã Pythonã€ã³ã¿ãŒããªã¿ãŒã§ã¯ã次ã®ãã®ãåŸãããŸãã
>>> from datetime import datetime >>> str(datetime.now()) '2017-09-28 16:06:30.439388' >>> str(datetime.utcnow()) '2017-09-28 23:06:51.406499'
datetime.now()
åŒã³åºããšãçŸåšå°ã®æ£ããæå»ãè¿ããã datetime.now()
åŒã³åºããšãUTCã¿ã€ã ãŸãŒã³ã®æå»ãè¿ãããŸãã äžçã®ããŸããŸãªå°åã«äœã人ã
ã«ãã®ã³ãŒããåæã«å®è¡ããããã«äŸé Œã§ããå Žåã datetime.now()
é¢æ°ã¯å人ã«å¯ŸããŠç°ãªãçµæãè¿ããŸããã datetime.utcnow()
ã¯åžžã«åäžã®å€ãè¿ããŸãåæã«ãå Žæã«é¢ä¿ãªãã ããã§ãã©ã®ãªãã·ã§ã³ãäžçäžã®ãŠãŒã¶ãŒãå©çšã§ããå¯èœæ§ãé«ãWebã¢ããªã±ãŒã·ã§ã³ã§æããã䜿çšããããšæããŸããïŒ
æããã«ããµãŒããŒã¯æéã管çããå¿
èŠããããŸãããããã¯å Žæã«äŸåããŸããã ãã®ã¢ããªã±ãŒã·ã§ã³ãéçºãããäžçäžã®ããŸããŸãªå°åã§è€æ°ã®éçšãµãŒããŒã䜿çšããå¿
èŠãçããå ŽåãåãµãŒããŒãããŸããŸãªã¿ã€ã ãŸãŒã³ã«åŸã£ãŠã¿ã€ã ã¹ã¿ã³ããããŒã¿ããŒã¹ã«æžã蟌ãããšã¯æãŸãããããŸããã UTCã¯æããã䜿çšãããçµ±äžã¿ã€ã ãŸãŒã³ã§ããã datetime
ã¯ã©ã¹ã§ãµããŒããããŠããããããããå¿
èŠã§ãã ãããŠãç§ã¯ããã䜿çšããŸãã
ãã ãããã®ãªãã·ã§ã³ã§ã¯ã1ã€ã®éèŠãªåé¡ãçºçããŸãã ç°ãªãã¿ã€ã ãŸãŒã³ã®ãŠãŒã¶ãŒã®å ŽåãUTCã¿ã€ã ãŸãŒã³ã®æå»ãèŠããšãå®éã«èšé²ãè¡ãããææãå€æããã®ã¯å°é£ã§ãã æéã¯UTCã§è¡šç€ºãããããšãäºåã«ç解ããå¿ èŠããããæé垯ã«åãããŠæéã粟ç¥çã«èª¿æŽã§ããå¿ èŠããããŸãã PDTã¿ã€ã ãŸãŒã³ã§ååŸ3æã«äœããéä¿¡ãããŠãŒã¶ãŒããã¡ãã»ãŒãžã22:00ãŸãã¯ããæ£ç¢ºã«ã¯22:00ã®UTCæéã§è¡šç€ºãããããšãããã«ç¢ºèªãããšããŸãã ãããã«ããã§ãããã
UTCã¿ã€ã ã¹ã¿ã³ãã®æšæºåã¯ãµãŒããŒã®èŠ³ç¹ããã¯éåžžã«çã«ããªã£ãŠããŸããããŠãŒã¶ãŒã«ãšã£ãŠäœ¿ããããã¯é£ãããªããŸãã ãã®ç« ã®ç®æšã¯ããµãŒããŒã§ç®¡çãããŠãããã¹ãŠã®ã¿ã€ã ã¹ã¿ã³ããUTCã§ä¿åããããšã«ããããã®åé¡ã解決ããããšã§ãã
ã¿ã€ã ãŸãŒã³å€æ
ãã®åé¡ã®æãããªè§£æ±ºçã¯ããã¹ãŠã®ã¿ã€ã ã¹ã¿ã³ããUTCããåãŠãŒã¶ãŒã®çŸå°æéã«å€æããããšã§ãã ããã«ããããµãŒããŒã¯äžè²«æ§ã®ããã«UTCã䜿çšãç¶ããããšãã§ãããŠãŒã¶ãŒããšã«èª¿æŽããããªã³ã¶ãã©ã€å€æãå©äŸ¿æ§ã®åé¡ã解決ããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã®è€éãã¯ãåãŠãŒã¶ãŒã®å Žæã決å®ããããšã«ãããŸãã
å€ãã®Webãµã€ãã«ã¯ããŠãŒã¶ãŒãã¿ã€ã ãŸãŒã³ãæå®ã§ããæ§æããŒãžããããŸãã ããã«ã¯ãã¿ã€ã ãŸãŒã³ã®ãªã¹ããå«ãããããããŠã³ãªã¹ãããŠãŒã¶ãŒã«è¡šç€ºãããã©ãŒã ã§æ°ããããŒãžãè¿œå ããå¿ èŠããããŸãã ãŠãŒã¶ãŒã¯ãç»é²ã®äžéšãšããŠæåã«ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã«ãã¿ã€ã ãŸãŒã³ãå ¥åããããã«æ±ããããŸãã
ããã¯åé¡ã解決ããé©åãªãœãªã¥ãŒã·ã§ã³ã§ããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§æ¢ã«èšå®ãããŠããæ å ±ã®äžéšããŠãŒã¶ãŒã«å ¥åããŠãããã®ã¯å°ãå¥åŠã§ãã ããŒã«ã«ã³ã³ãã¥ãŒã¿ãŒããã¿ã€ã ãŸãŒã³èšå®ãèŠã€ããããšãã§ããã°ãããå¹ççãªããã§ãã
çµå±ã®ãšãããWebãã©ãŠã¶ãŒã¯ãŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ãèªèããæšæºã®JavaScript APIãä»ããŠæäŸããŸãã JavaScriptãä»ããŠå©çšå¯èœãªã¿ã€ã ãŸãŒã³æ å ±ã䜿çšããã«ã¯ãå®éã«ã¯2ã€ã®æ¹æ³ããããŸãã
ãå€ãåŠæ ¡ãã®ã¢ãããŒãã¯ããŠãŒã¶ãŒãæåã«ã¢ããªã±ãŒã·ã§ã³ã«ãã°ã€ã³ãããšãã«ãWebãã©ãŠã¶ãŒãäœããã®æ¹æ³ã§ã¿ã€ã ãŸãŒã³æ å ±ããµãŒããŒã«éä¿¡ããããšã§ãã ããã¯ã AjaxåŒã³åºãã䜿çšããããããã«ç°¡åã«ã¡ã¿ãªãã¬ãã·ã¥ã¿ã°ã䜿çšããŠå®è¡ã§ããŸãã ãµãŒããŒãã¿ã€ã ãŸãŒã³ãå®çŸ©ãããšãã»ãã·ã§ã³ã«ä¿åããããããŒã¿ããŒã¹ã®ãŠãŒã¶ãŒã¬ã³ãŒãã«æžã蟌ãã ãããŠããã³ãã¬ãŒãã衚瀺ãããšãã«ãã¹ãŠã®ã¿ã€ã ã¹ã¿ã³ããæ§æã§ããŸãã
ãæ°ããåŠæ ¡ãã®ã¢ãããŒãã¯ããµãŒããŒã®ç¶æ³ãå€æŽãããJavaScriptã䜿çšããŠã¯ã©ã€ã¢ã³ãã®UTCããããŒã«ã«ã¿ã€ã ãŸãŒã³ã«å€æã§ããããã«ããããšã§ãã
äž¡æ¹ã®ãªãã·ã§ã³ã¯æ©èœããŠããŸããã2çªç®ã®ãªãã·ã§ã³ã«ã¯å€§ããªå©ç¹ããããŸãã ã¿ã€ã ãŸãŒã³ãç¥ã£ãŠããã ãã§ã¯ããŠãŒã¶ãŒãæåŸ ãã圢åŒã§æ¥ä»ãšæå»ã衚瀺ããã®ã«ååã§ã¯ãããŸããã ãã©ãŠã¶ã¯ãAM / PMããã³24æé圢åŒãDD / MM / YYYY察MM / DD / YYYYããã³ãã®ä»ã®å€ãã®æåçãŸãã¯å°åçãªã¹ã¿ã€ã«ãªã©ãå®çŸ©ããã·ã¹ãã ãã±ãŒã«æ§æã«ãã¢ã¯ã»ã¹ã§ããŸãã
ããã§ååã§ãªãå Žåããæ°ããåŠæ ¡ããæ¯æããå¥ã®å©ç¹ããããŸãã ããããã¹ãŠè¡ããªãŒãã³ãœãŒã¹ã©ã€ãã©ãªããããŸãïŒ
Moment.jsãšFlask-Momentã®çŽ¹ä»
Moment.jsã¯ãèãããããã¹ãŠã®æžåŒèšå®ãªãã·ã§ã³ãæäŸãããããæ¥ä»ãšæå»ããŸã£ããç°ãªãã¬ãã«ã«è¡šç€ºããã¿ã¹ã¯ãå®è¡ããå°ããªãªãŒãã³ãœãŒã¹ã®JavaScriptã©ã€ãã©ãªã§ãã ãŸããå°ãåã«ãFlask-MomentãäœæããŸãããããã¯ãã¢ããªã±ãŒã·ã§ã³ã«Moment.jsãç°¡åã«çµã¿èŸŒãããšãã§ããå°ããªFlaskæ¡åŒµæ©èœã§ãã
ããã§ã¯ãFlask-Momentãã€ã³ã¹ããŒã«ããããšããå§ããŸãããã
(venv) $ pip install flask-moment
ãã®æ¡åŒµæ©èœã¯ãéåžžã®æ¹æ³ã§Flaskã¢ããªã±ãŒã·ã§ã³ã«è¿œå ãããŸãã
app/__init__.py
ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã
# ... from flask_moment import Moment app = Flask(__name__) # ... moment = Moment(app)
ä»ã®æ¡åŒµæ©èœãšã¯ç°ãªããFlask-Momentã¯moment.jsãšé£æºããããããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãã³ãã¬ãŒãã«ãã®ã©ã€ãã©ãªãå«ããå¿
èŠããããŸãã ãã®ã©ã€ãã©ãªãåžžã«å©çšã§ããããã«ãããŒã¹ãã³ãã¬ãŒãã«è¿œå ããŸãã ãããè¡ãã«ã¯2ã€ã®æ¹æ³ããããŸãã æãçŽæ¥çãªæ¹æ³ã¯ãã©ã€ãã©ãªãã€ã³ããŒããã<script>
ã¿ã°ãæ瀺çã«è¿œå ããããšã§ãã ããããFlask-Momentã¯ã <script>
ãçæããmoment.include_moment()
é¢æ°ãæäŸããããšã«ãããããã«ç°¡åãªãªãã·ã§ã³ãæäŸããŸãã
app / templates / base.htmlïŒmoment.jsãããŒã¹ãã³ãã¬ãŒãã«è¿œå ããŸãã
... {% block scripts %} {{ super() }} {{ moment.include_moment() }} {% endblock %}
ããã§è¿œå ããscripts
ãããã¯ã¯ãFlask-BootstrapããŒã¹ãã³ãã¬ãŒãã«ãã£ãŠãšã¯ã¹ããŒããããå¥ã®ãããã¯ã§ãã ããã¯ãJavaScriptã€ã³ããŒããå«ããå¿
èŠãããå Žæã§ãã ãã®ãããã¯ã¯ãããŒã¹ãã³ãã¬ãŒãã§å®çŸ©ãããäžéšã®ã³ã³ãã³ããæ¢ã«å«ãŸããŠãããšããç¹ã§ãåã®ãããã¯ãšã¯ç°ãªããŸãã ç§ãããããã®ã¯ãåºç€ãšãªãã³ã³ãã³ãã倱ãããšãªããmoment.jsã©ã€ãã©ãªãè¿œå ããããšã§ãã ããã¯ãåºæ¬ãã³ãã¬ãŒãã®ã³ã³ãã³ããä¿åããsuper()
åœä»€ã䜿çšããŠå®çŸãããŸãã super()
ã䜿çšããã«ãã³ãã¬ãŒãã§ãããã¯ãå®çŸ©ãããšãããŒã¹ãã³ãã¬ãŒãã§ãã®ãããã¯ã«å¯ŸããŠå®çŸ©ãããã³ã³ãã³ãã¯ãã¹ãŠå€±ãããŸãã
Moment.jsã䜿çšãã
Moment.jsã¯ããã©ãŠã¶ãŒã«ã¢ã¯ã»ã¹å¯èœãªmoment
ã¯ã©ã¹ãæäŸããŸãã ã¿ã€ã ã¹ã¿ã³ããäœæããããã®æåã®ã¹ãããã¯ã ISO 8601圢åŒã§å¿
èŠãªã¿ã€ã ã¹ã¿ã³ãã転éããããšã«ããããã®ã¯ã©ã¹ã®ãªããžã§ã¯ããäœæããããšã§ã ã 以äžã«äŸã瀺ããŸãã
t = moment('2017-09-28T21:45:23Z')
æ¥ä»ãšæå»ã®æšæºISO 8601圢åŒã«æ
£ããŠããªãå Žåã圢åŒã¯æ¬¡ã®ãšããã§ãïŒ {{ year }}-{{ month }}-{{ day }}T{{ hour }}:{{ minute }}:{{ second }}{{ timezone }}
ã UTCã¿ã€ã ãŸãŒã³ã§ã®ã¿äœæ¥ããããšãæ¢ã«æ±ºããŠããã®ã§ãæåŸã®éšåã¯åžžã«Z
ã§ãããããã¯ISO 8601æšæºã®UTCã§ãã
moment
ãªããžã§ã¯ãã¯ãããŸããŸãªè¡šç€ºãªãã·ã§ã³çšã®ã¡ãœãããããã€ãæäŸããŸãã 以äžã¯ãæãäžè¬çãªãªãã·ã§ã³ã®äžéšã§ãã
moment('2017-09-28T21:45:23Z').format('L') "09/28/2017" moment('2017-09-28T21:45:23Z').format('LL') "September 28, 2017" moment('2017-09-28T21:45:23Z').format('LLL') "September 28, 2017 2:45 PM" moment('2017-09-28T21:45:23Z').format('LLLL') "Thursday, September 28, 2017 2:45 PM" moment('2017-09-28T21:45:23Z').format('dddd') "Thursday" moment('2017-09-28T21:45:23Z').fromNow() "7 hours ago" moment('2017-09-28T21:45:23Z').calendar() "Today at 2:45 PM"
ãã®äŸã§ã¯ã2017幎9æ28æ¥21:45 UTCã®è¡ã§åæåãããmoment
ãªããžã§ã¯ããäœæããŸãã äžèšã§è©Šãããã¹ãŠã®ãã©ã¡ãŒã¿ãŒã¯ãã³ã³ãã¥ãŒã¿ãŒã§æ§æãããã¿ã€ã ãŸãŒã³ã§ããUTC-7ã§è¡šç€ºãããŠããããšãããããŸãã äžèšã®ã³ãã³ãããã©ãŠã¶ãŒã®ã³ã³ãœãŒã«ã«å
¥åããŠãã³ã³ãœãŒã«ãéãããŒãžã«moment.jsãå«ãŸããŠããããšã確èªã§ããŸãã äžèšã®å€æŽãè¡ã£ãå Žåãmoment.jsãå«ããããšã§ã httpsïŒ //momentjs.com/ã§ãã€ã¯ãããã°ã§ãããè¡ãããšãã§ããŸã ã
ç°ãªãã¡ãœãããç°ãªããã¥ãŒãäœæããæ¹æ³ã«æ³šç®ããŠãã ããã format()
ãPythonã®strftimeé¢æ°ã«äŒŒã圢åŒåæååã䜿çšããŠåºå圢åŒãå¶åŸ¡ããŸãã fromNow()
ããã³calendar()
ã¡ãœããã¯ãçŸåšã®æå»ã«é¢é£ããã¿ã€ã ã¹ã¿ã³ãã衚瀺ãããšããç¹ã§èå³æ·±ãã®ã§ãã1ååããã2æéåŸããªã©ã®åºåè¡ãååŸããŸãã
JavaScriptã§çŽæ¥äœæ¥ããŠããå Žåãäžèšã®åŒã³åºãã¯ã¿ã€ã ã¹ã¿ã³ãã衚瀺ããæååãè¿ããŸããã ãããã£ãŠããã®ããã¹ããããŒãžã®é©åãªå Žæã«è¿œå ããã«ã¯ãJavaScriptã䜿çšããŠDOMãæäœããå¿
èŠããããŸã ã Flask-Momentæ¡åŒµæ©èœã«ããmoment.jsã®äœ¿çšã倧å¹
ã«ç°¡çŽ åããããã³ãã¬ãŒãã«å¿
èŠãªJavaScriptããžãã¯ãå«ãmoment
ãªããžã§ã¯ããå«ããŠãããŒãžã«æ£ããæ¹æ³ã§æéã衚瀺ã§ããŸãã
ãããã¡ã€ã«ããŒãžã«è¡šç€ºãããã¿ã€ã ã¹ã¿ã³ããèŠãŠã¿ãŸãããã çŸåšã®user.htmlãã³ãã¬ãŒãã«ãããPythonã¯æéã®æååè¡šçŸãçæã§ããŸãã 次ã®ããã«ãFlask-Momentã䜿çšããŠãã®ã¿ã€ã ã¹ã¿ã³ããäœæã§ããŸãã
app / templates / user.htmlïŒmoment.jsã䜿çšããã¿ã€ã ã¹ã¿ã³ãã
{% if user.last_seen %} <p>Last seen on: {{ moment(user.last_seen).format('LLL') }}</p> {% endif %}
ã芧ã®ãšãããFlask-Momentã¯JavaScriptã©ã€ãã©ãªã®æ§æã«äŒŒãæ§æã䜿çšããŸãããããããªéãããããŸããã moment()
åŒæ°ã¯ISO 8601æååã§ã¯ãªãPython datetime
ãªããžã§ã¯ãã«ãªããŸãããŸããDOMã®ç®çã®å Žæã«ã¬ã³ããªã³ã°ãããã©ãã«ãæ¿å
¥ããããã«å¿
èŠãªJavaScriptã³ãŒããèªåçã«çæããŸãã
Flask-Momentãšmoment.jsã䜿çšã§ãã2çªç®ã®å Žæã¯ã _post.html
ãµããã³ãã¬ãŒãã§ããããã¯ãã€ã³ããã¯ã¹ãšãŠãŒã¶ãŒããŒãžããåŒã³åºãããŸãã ãã³ãã¬ãŒãã®çŸåšã®ããŒãžã§ã³ã§ã¯ãåã¡ãã»ãŒãžã®åã«ãusername sayssïŒããšããè¡ããããŸãã fromnow()
ã䜿çšããŠã¿ã€ã ã¹ã¿ã³ããè¿œå ã§ããŸãã
app / templates / _post.htmlïŒã¡ãã»ãŒãžãµããã¿ãŒã³ã®ã¿ã€ã ã¹ã¿ã³ãã
<a href="{{ url_for('user', username=post.author.username) }}"> {{ post.author.username }} </a> said {{ moment(post.timestamp).fromNow() }}: <br> {{ post.body }}
ããã¯ãFlask-Momentãšmoment.jsã§ã¬ã³ããªã³ã°ããããšãããããã®ã¿ã€ã ã¹ã¿ã³ãã®äž¡æ¹ãã©ã®ããã«èŠãããã§ãïŒ
翻蚳è ããã®PS
çªç¶ãç§ã®ããã«ãè±èªä»¥å€ã®èšèªãããšãã°ãã·ã¢èªã§æ¥ä»ã衚瀺ããå¿
èŠãããå Žåã ãã©ã¹ã³ã¢ãŒã¡ã³ãæ¡åŒµã«ã¯ããã®ç®çã®ããã«lang()
ã¡ãœããããããŸãã
app / templates / base.htmlïŒããŒã¹ãã³ãã¬ãŒãã®moment.jsãããã¯ã«langã¡ãœãããè¿œå ããŸããã
... {% block scripts %} {{ super() }} {{ moment.include_moment() }} {{ moment.lang('ru') }} <!-- --> {% endblock %}