Хостинг Django от «Джино»
Table of contents

Ваше второе представление: Динамическое содержимое

Наше представление «Здравствуй, Мир» было поучительным с точки зрения основ использования 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. Обратите внимание на комментарий в этом файле, там указана ссылка с актуальным списком мировых временных зон.


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5