[Изменить] И, я должен добавить, наиболее элегантно? Я предполагаю (но не знаю, как это сделать), я мог бы сначала пропустить результаты в коде python и отформатировать каждую дату там, но я предпочел бы только один цикл ... [\ Edit]Как я могу легко форматировать поля даты моего GQLQuery в другой часовой пояс?
В моем случае British Summer Время (которое только что произошло недавно).
В настоящий момент моя самая верхняя формальная дата правильная, но даты в отдельных строках результата все еще находятся в формате UTC (1 час позади). Пример вывод представляет собой шаблонная страница, которая выглядит следующим образом (где UTC, возвращаемый datetime.now
в данном случае 12:42):
Time is now: 13:42 on 05 April, 2012
2012-04-05 13:10:00 Event 234
2012-04-05 13:10:00 Event 235
2012-04-05 13:10:00 Event 236
...
Вот что я делаю ...
from pytz.gae import pytz # N.B. Using the recommended version of pytz
from datetime import datetime
# Use datetime now (in UTC) to select upcoming events (also stored in UTC)
nowat = datetime.now()
upcoming_events = db.GqlQuery(
"SELECT * FROM Event WHERE eventdatetime >= :1",nowat)
# Convert time to BST and print to string…
utc = pytz.timezone('UTC')
nowat = utc.localize(nowat)
bst = pytz.timezone('Europe/London')
timenow = nowat.astimezone(bst).strftime("%H:%M on %d %B, %Y")
# Pass results to template for formating… (this is the Django engine)
template_values = {
'time' : timenow,
'events' : upcoming_events
}
path = os.path.join(os.path.dirname(__file__),'html','today.html')
self.response.out.write(template.render(path,template_values))
I подумал, что может быть какая-то магия, которую я мог бы аналогичным образом применить в коде шаблонов - но только кажется, что date
built-in позволяет формировать преобразование даты и времени НЕ из UTC.
Шаблон:
<html>
<head>
<link type="text/css" rel="stylesheet" href="/css/main.css" />
</head>
<body>
<p>Time is now: {{ time }}</p>
<table>
{% for event in events %}
<tr>
<td> {{ event.eventdatetime }} </td>
<td> {{ event.name }} </td>
</tr>
{% endfor %}
</table>
</body>
</html>
Это выглядит отлично - но, к сожалению, я попробовал и получил это: 'TemplateSyntaxError: 'tz' не является допустимой библиотекой тегов: не удалось загрузить библиотеку шаблонов из django.templatetags.tz, без модуля с именем tz' - поэтому я не уверен, какие модули GAE предоставляет ... – timlukins
, если он не включен, вы можете взять исходный код django для этого тега и вставить его в свои собственные теги шаблонов, как описано здесь: http://4.flowsnake.org/archives/459 – Hoff
Спасибо. Это сработало. Немного боли, чтобы вырвать код тега 'tz'. – timlukins