Наше представление «Здравствуй, Мир» было поучительным с точки зрения основ использования Django, но оно не было примером динамического создания страниц, так как содержимое страницы не изменялось. Каждый раз, посещая эту страницу, вы видели одно и тоже. То же самое достигается и с помощью статического HTML файла.
Для нашего второго представления давайте создадим что-нибудь динамическое — страницу, которая будет отображать текущую дату и время. Это хороший и одновременно простой пример, потому что он не требует ни использования базы данных, ни обработки пользовательского ввода — просто выводит значение даты/времени, ориентируясь на внутренние часы сервера. Это лишь чуть более интересно, чем предыдущее представление, но оно продемонстрирует несколько новых концепций.
Данное представление должно делать две вещи: вычислять текущую
дату и время и возвращать HttpResponse,
содержащий это значение. Если у вас был опыт работы с Python, вы
знаете, что он предоставляет модуль datetime для
работы с датой и временем. Покажем как его можно использовать:
>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2008, 12, 13, 14, 9, 39, 2731)
>>> print now
2008-12-13 14:09:39.002731
Это достаточно просто и не требует наличия Django. Это просто код на языке Python. (Мы хотели бы подчеркнуть, что вы должны знать различия между «просто Python» и кодом, который относится к Django. После того, как вы изучите 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. Следует отметить, что мы спрятали
функцию hello из этого примера для
краткости, но весь файл будет выглядеть так:
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:
Мы добавили import datetime в начало модуля, теперь мы можем работать с датами.
Новая функция
current_datetimeвозвращает текущую дату и время, в виде объектаdatetime.datetime, и сохраняет его в локальной переменнойnow.Вторая строка кода внутри представления создаёт HTML отклик, используя возможности Python для форматирования строк. Элемент %s внутри строки является подстановкой, а знак процента после строки означает «Замени %s в предыдущей строке на значение переменной
now.» Переменнаяnowтехнически является объектомdatetime.datetime, не строкой, но подстановка %s преобразовывает его в строковое представление, подобное "2008-12-13 14:09:39.002731". Всё это выражается в виде HTML строки "<html><body>It is now 2008-12-13 14:09:39.002731.</body></html>".(Да, наш HTML некорректен, но мы стараемся сделать наш пример простым и коротким.)
Наконец, представление возвращает объект
HttpResponse, который содержит сгенерированный отклик — точно так же, как и в случае сhello.
После добавления новой функции в views.py,
следует добавить шаблон в urls.py, чтобы
указать Django какой именно URL должен обрабатываться с помощью
этой функции представления. Подойдёт что-нибудь подобное
/time/:
from django.conf.urls.defaults import *
from mysite.views import hello, current_datetime
urlpatterns = patterns('',
('^hello/$', hello),
('^time/$', current_datetime),
)
Здесь мы сделали два изменения. Сначала мы проимпортировли
функцию current_datetime в начале
модуля. Затем, и это самое главное, мы добавили шаблон URL
/time/, ассоциированный с этим новым
представлением.
После всех этих действий можно запустить runserver и посетите http://127.0.0.1:8000/time/ с помощью браузера. Вы должны увидеть текущую дату и время.
Временная зона в Django
Время на вашем компьютере может отличаться на несколько
часов. Всё потому, что Django обращает внимание на временные
зоны, а по умолчанию Django настроен на зону
America/Chicago. (Она должна быть установлена
по-умолчанию, вот разработчики Django и выбрали в качестве
таковой свою временную зону.) Если вы живёте не рядом с
ними, укажите свою зону в
settings.py. Обратите внимание на
комментарий в этом файле, там указана ссылка с актуальным
списком мировых временных зон.
| Пред. | Уровень выше | След. |
| Как Django обрабатывает запрос | Начало | Схема URL и свободное связывание |
2 комментария | Оставьте комментарий
Здравствуйте. После добавления функции вывода времени и запуска страницы (.../time/) получаю Server Error (500). Это ошибка файла settings.py? Подскажите, в чем может быть проблема и как ее решить?
Ответ на TimurShubin
Здравствуйте. После добавления функции вывода времени и запуска страницы (.../time/) получаю Server Error (500). Это ошибка файла settings.py? Подскажите, в чем может быть проблема и как ее решить?
вопрос снят, пропустил подключение datetime