Язык программирования Python

Курс IT-Академии Сухорукова

Май-июль 2019

Следующее занятие

25 июня в 19:00 NOVT

Задание. Веб-сайт с каталогом файлов

Разработать сайт, отображающий хранящиеся в нём текстовые файлы, и каталог этих файлов.

Исходные данные

Есть набор текстовых файлов (с расширением .txt). Эти файлы лежат в некотором каталоге в файловой системе сервера. Путь к этому каталогу пусть задаётся прямо в скрипте. Сами текстовые файлы сделайте, например, с помощью сервиса Яндекс.Рефераты, или скачайте небольшие рассказы из Библиотеки Мошкова, или возьмите тексты Пушкина и Гоголя из этого архива, или сами напишите, не важно.

Задача

Разработать сайт, состоящий из страницы каталога файлов (главная страница) и страниц просмотора этих файлов.

На главной странице выводится название сайта, приветствие и список файлов со ссылками на их страницы просмотра. Для каждого файла указать имя и размер (желательно размер вывести в удобном для восприятия формате, например, воспользовавшись django-фильтром filesizeformat). Список файлов можно вывести в виде нумерованного списка (тег <ol>, вот описание), либо в виде маркированного списка (тег <ul>, вот описание), либо в виде таблицы (тег <table>, вот описание).

На странице просмотра выводится название сайта, название файла, ссылка на главную страницу и содержимое файла.

Вывод текстового файла на веб-страницу —довольно простая задача. Нужно прочитать содержимое файла в строковую переменную и просто передать её в шаблон. Да-да, весь текст файла в одной переменной.

Однако, как вы знаете, HTML не сохраняет форматирование текстовых файлов. Чтобы вывести содержимое текстового файла с сохранением переводов строк, есть несколько путей.

  1. Поместить содержимое текстового файла в шаблоне в тег <pre> (вот описание этого тега).
  2. Вручную в скрипте (не в шаблоне!) заменить все символы перевода строки на тег <br> (вот его описание), но тогда нужно воспользоваться фильтром safe (вот описание), чтобы django корректно вывела теги.
  3. Пропустить содержимое файла при выводе через django-фильтр linebreaks (вот страница документации по этому фильтру).

Замечания по реализации

  1. Список файлов в каталоге можно получить с помощью функций из модуля os.
  2. При выводе содержимого файла убедитесь, что файл реально имеет расширение .txt.
  3. Если запрошенного пользователем файла нет, выбрасывайте исключение Http404.
  4. Верхняя часть («шапка») страницы должна быть одинаковой на всех страницах. В ней должно быть:
    1. Название сайта.
    2. Возможно, картинка-логотип (скачайте какую-нибудь картинку из интернета и разместите как статический файл, вот документация).
    3. Ссылка на главную страницу сайта.
    4. Информация об авторе сайта.