Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

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

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


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
511 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

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

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID