2012-04-05 1 views
1

[Изменить] И, я должен добавить, наиболее элегантно? Я предполагаю (но не знаю, как это сделать), я мог бы сначала пропустить результаты в коде 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 подумал, что может быть какая-то магия, которую я мог бы аналогичным образом применить в коде шаблонов - но только кажется, что datebuilt-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> 

ответ

1

с шаблонизатор Джанго, вы можете использовать Time zone aware output in templates

пример использования из документации:

{% load tz %} 

{% timezone "Europe/Paris" %} 
    Paris time: {{ value }} 
{% endtimezone %} 

{% timezone None %} 
    Server time: {{ value }} 
{% endtimezone %} 
+0

Это выглядит отлично - но, к сожалению, я попробовал и получил это: 'TemplateSyntaxError: 'tz' не является допустимой библиотекой тегов: не удалось загрузить библиотеку шаблонов из django.templatetags.tz, без модуля с именем tz' - поэтому я не уверен, какие модули GAE предоставляет ... – timlukins

+1

, если он не включен, вы можете взять исходный код django для этого тега и вставить его в свои собственные теги шаблонов, как описано здесь: http://4.flowsnake.org/archives/459 – Hoff

+0

Спасибо. Это сработало. Немного боли, чтобы вырвать код тега 'tz'. – timlukins