Наше первое представление “Hello world” было достаточно информативным для демонстрации основ того, как работает Django, но это не был пример настоящей динамической страницы, потому что содержимое страницы всегда было одно и то же. Каждый раз, когда вы обращаетсь к /hello/
– вы видите одну и ту же статическую страницу HTML.
Для нашего следующего представления – давайте создадим нечто более динамическое – страницу, которая будет отображать текущее время и дату. Это простой шаг, потому что тут не используется база данных или какой-либо ввод данных от пользователя – а просто вывод времени вашего сервера. Это лишь ненамного сложнее, чем “Hello world“, но мы сможем продемонстрировать несколько новых понятий.
Это представление должно выполнять два действия: вычислить текущие время и дату, и вернуть HttpResponse
, который будет содержать эти данные. Если вы знакомы с Python 🙂 – вы должны знать, что в нём есть модуль datetime
для вычисления даты. Вот как он используется:
>>> import datetime >>> now = datetime.datetime.now() >>> now datetime.datetime(2015, 2, 2, 23, 1, 13, 162098) >>> print now 2015-02-02 23:01:13.162098
Это было очень просто, и не имеет ничего общего с Django – это просто код на Python.
Что бы написать Django-представление, которое будет выводить дату и время, нам надо использовать выражение datetime.datetime.now()
в этом представлении и вернуть HttpResponse
. Вот как это может выглядеть:
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
Как и в случае с представлением функции hello
– нам надо поместить этот код в файл views.py
. Вот как будет выглядеть весь файл целиком:
from django.http import HttpResponse import datetime def hello(request): return HttpResponse("Hello world") def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
(далее мы не будем отображать код из предыдущих примеров в новых примерах кода, кроме тех случаев, когда это необходимо – вы должны понимать из контекста, какая часть кода новая, а какая – старая)
Давайте пройдёмся по изменениям, которые мы сделали в файле views.py
, что бы добавить новое представление current_datetime
:
- мы добавили импорт модуля
datetime
, что бы иметь возможность вычислять дату; - новая функция
current_datetime
вычисляет текущие время и дату как объектdatetime.datetime
и сохраняет значеиние в локальную переменнуюnow
; - вторая страка кода внутри представления создаёт HTML-ответ, используя форматирование строк. Знак
%s
в строке является заполнителем, а знак%
после строки означает “Заменить%s
в предыдущей строке значением из переменнойnow
“. Переменнаяnow
технически является объектомdatetime.datetime
, а не строкой, но%s
конвертирует её в строковое представление вида “2015-02-02 23:01:13.162098“. В результате мы получим HTML-строку, такую как “<html><body>It is now 2015-02-02 23:01:13.162098.</body></html>” (да, наш код HTML не совсем корректен, но мы стараемся держать пример простым и коротким); - в конце-концов – представление возвращает объект
HttpResponse
, который содержит сгенерированный ответ, точно так же, как и в функцииhello
.
После добавления этого кода в файл views.py
, давайте добавим URLpattern
в файл urls.py
, что бы сообщить Django какой URL будет обрабатывать это представление. Например, URL вида /time/
будет вполне уместен:
from django.conf.urls.defaults import patterns, include, url from example.views import hello, current_datetime urlpatterns = patterns('', url(r'^hello/$', hello), url(r'^time/$', current_datetime), )
Мы сделали два изменения тут. Во-первых – мы импортировали функцию current_datetime
. Во-вторых, самое важное, мы добавили новый URLpattern
, связывающийс URL /time/
с новым представлением.
С написанным представлением, и обновлённым URLconf
, запустите сервер и откройте страницу http://127.0.0.1:8000/time/ в браузере. Вы должны увидеть текущие время и дату.
Часовой пояс Django
В зависимости от вашего сервера, время в результате Django может отличаться от времени на сервере. Это происходит от того, что Django по-умолчанию использует часовой пояс America/Chicago
. Если вы живёте в другом часов поясе – измените настройки в файле settings.py
. В комментариях к параметру TIME_ZONE
вы можете найти ссылку на список всех временных зон (http://en.wikipedia.org/wiki/List_of_tz_zones_by_name)
Продолжение – в статье Django Book: URLconf и “слабые связи”.