2009-06-12 4 views
8

В моем приложении Django я получаю раз от WebService, при условии, в виде строки, которые я использую в своих шаблонах:Форматирование раз дата, указанная в виде строки в Django

{{date.string}} 

Это дает мне дату, такие как:

2009-06-11 17:02:09+0000 

Это, очевидно, немного уродливые, и я хотел бы представить их в хорошем формате для моих пользователей. Django имеет большой встроенный в дату форматера, который будет делать именно то, что я хотел:

{{ value|date:"D d M Y" }} 

Однако это предполагает, что значение, которое будет предусмотрено в качестве объекта даты, а не строку. Поэтому я не могу отформатировать его, используя это. После поиска здесь на python StackOverflow strptime, похоже, делает то, что я хочу, но, будучи довольно новым для Python, мне было интересно, сможет ли кто-нибудь придумать более простой способ получить форматирование даты с помощью строк, не прибегая к написанию целого нового пользовательского strptime шаблон тега?

ответ

10

Возможно, вам лучше разобрать строку, полученную из веб-службы, в вашем коде просмотра, а затем передать datetime.date (или строку) в шаблон для отображения. Дух шаблонов Django заключается в том, что там очень мало работы по кодированию; они предназначены только для презентации, и поэтому они стараются не писать вам код Python, встроенный в HTML.

Что-то вроде:

from datetime import datetime 
from django.shortcuts import render_to_response 

def my_view(request): 
    ws_date_as_string = ... get the webservice date 
    the_date = datetime.strptime(ws_date, "%Y-%m-%d %H:%M:%S+0000") 
    return render_to_response('my_template.html', {'date':the_date}) 

Как Матфей указывает, это роняет часовой пояс. Если вы хотите сохранить смещение от GMT, попробуйте использовать отличную стороннюю библиотеку dateutils, которая легко обрабатывает даты синтаксического анализа в нескольких форматах, с часовыми поясами, без необходимости предоставления шаблона формата времени, такого как strptime.

+5

+1 Храните обработку данных в представлении, а не в шаблоне. – krubo

+8

Вы можете утверждать, что, поскольку вы форматируете дату, было бы целесообразно сделать это на уровне презентации (т. Е. В шаблоне) – btk

+1

Мне нравится поддерживать мои «контексты» json-able, так как это позволяет мне также возвращать их как ответы REST. Python datetime не json-serializable, поэтому я предпочел бы сделать преобразование в шаблоне. Я предполагаю, что это может быть достигнуто с помощью templatetag. –

0

Это не имеет дело с тегом Джанго, но код strptime является:

d = strptime("2009-06-11 17:02:09+0000", "%Y-%m-%d %H:%M:%S+0000") 

Обратите внимание, что вы падаете информацию о часовом поясе.

Смежные вопросы