Базовая структура | HTML | CodeBasics
Любой HTML-документ можно разбить на несколько основных составляющих:
- Блок
head
, содержащий метаинформацию о нашем сайте. Данные из этого блока не отображаются непосредственно на странице, а служат для её описания, подключения стилей и скриптов. - Блок
body
является основным местом, где строится HTML-разметка. Данные в этом блоке будут обработаны и выведены в браузер.
Простейшая разметка в HTML5 выглядит следующим образом:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Базовая разметка HTML</title> </head> <body> <h2>Code Basics</h2> <p>Бесплатные уроки по программированию и HTML для новичков</p> </body> </html>
Обратите внимание на первую строку <!DOCTYPE html>
. DOCTYPE (document type) — служебная информация для браузера, где описывается стандарт HTML, который нужно обработать.
<!DOCTYPE html>
, который говорит, что наш документ размечен по стандарту HTML5.Далее открывается парный тег <html>
с атрибутом lang="ru"
. Указание языка также необходимо для браузеров, особенно если сайт рассчитан на массовую аудиторию, в том числе и за рубежом.
Во избежание ошибок, обе вышеописанные конструкции, при их отсутствии, будут добавлены браузером автоматически. В некоторых ситуациях браузеры могут добавить не те строки, которые вы бы хотели, и вместо обработки страницы по стандарту HTML5 браузер будет обрабатывать всё как HTML4, что приведёт ко множеству проблем, так как старые стандарты могут не знать о существовании многих тегов, таких как <main>
, <nav>
и так далее
Скопируйте базовую разметку HTML из примера выше. Внутри тега <body>
вставьте любую разметку. Попробуйте различные теги из тех, которые были пройдены в предыдущих курсах.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя 🤔
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно 🙄Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
←Предыдущий
Следующий→Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
— HTML — Дока
- Кратко
- Пример
- Как понять
- Как пишется
- Атрибуты
- Подсказки
- На практике
- Дока Дог советует
Кратко
Скопировано<iframe>
— это контейнер, который позволяет вставить любой HTML-документ из другого источника. Часто этот документ интерактивный — например, карта, видео или пост из соцсети.
Этот контейнер обычно называют фреймом. Внешний вид фрейма и его положение на странице можно задать через CSS.
Пример
СкопированоС помощью такого нехитрого кода мы можем встроить карту размером 560 на 400 пикселей на любую страницу:
<iframe title="Inline Frame Map" frameborder="1" allowfullscreen="true" src="https://yandex.ru/map-widget/v1/-/CBFkaYSE0A"></iframe>
<iframe
title="Inline Frame Map"
frameborder="1"
allowfullscreen="true"
src="https://yandex.ru/map-widget/v1/-/CBFkaYSE0A"
>
</iframe>
Как понять
Скопировано<iframe>
можно представить как «окно» или фрейм, через которое на вашей странице можно увидеть любое содержимое с других сайтов. Это значит, что если карту, видео, пост или другой элемент удалят с оригинального сайта, он пропадёт и с вашей страницы. Останется только пустое место или надпись вроде «Контент недоступен».
Встраивать файлы можно либо по ссылке с помощью атрибута src
, либо целиком HTML-код файла с помощью srcdoc
.
Как пишется
СкопированоЧасто сервисы, из которых мы хотим что-то встроить (карты, посты и тому подобное), сами могут сгенерировать вам <iframe>
. Его останется только добавить в свой код.
Контейнер <iframe>
нужно всегда закрывать.
Атрибуты
Скопированоsrc
— URL-адрес файла, который вы встраиваете.
srcdoc
— позволяет встроить HTML-код целиком, так что браузеру не придётся подгружать что-то по внешней ссылке. Если используется этот атрибут, то ссылка src
игнорируется.
sandbox
— ограничивает определённые действия и функции встраиваемого документа. Если просто указать атрибут sandbox
, то он применит сразу все возможные ограничения. Либо можно указать нужные ограничения в любом порядке через пробел:
sandbox
allow
— позволяет отправлять формы внутри- forms <iframe>
.allow
— позволяет открывать модальные окна, которые мы все так не любим: вроде «Оставьте свой имейл» или «Не уходите так быстро! У вас товар в корзине». Обычно эти окна не дают пользоваться сайтом, пока их не закроешь.- modals allow
— позволяет фиксировать горизонтальное или вертикальное положение экрана.- orientation - lock allow
— позволяет пользователю управлять содержимым- pointer - lock <iframe>
с помощью курсора через Pointer Lock API.allow
— разрешает показ всплывающих окон, вызванных с помощью- popups window
,. open ( ) target
или= " _ blank" show
.Modal Dialog ( ) allow
— позволяет содержимому фрейма открывать новые окна. С этим параметром у таких окон не будет тех ограничений, которые есть у- popups - to - escape - sandbox <iframe>
с атрибутомsandbox
.allow
— разрешает использовать Presentation API.- presentation allow
— контент из- same - origin <iframe>
загружается по тем же правилам и с теми же ограничениями, что и страница, на которой он находится.allow
— позволяет загружать скрипты. При этом всплывающие окна будут запрещены.- scripts allow
— позволяет открывать ссылки, которые есть в- top - navigation <iframe>
, в том же окне, в которое встроен фрейм.allow
— позволяет контенту из фрейма управлять страницей, на которой он находится. Но только по инициативе пользователя.- top - navigation - by - user - activation
name
— имя фрейма. Пригодится, чтобы создать ссылку, по которой новая страница будет открываться в нужном фрейме.
Подсказки
Скопировано💡 Атрибут sandbox
будет игнорироваться, если использовать одновременно значения allow
и allow
и если исходная страница и <iframe>
на ней загружаются из одного и того же источника.
💡 Помните, что <iframe>
— этот как будто ещё одна страница, которая загружается внутри вашей страницы.
💡 В <iframe>
стоит добавить атрибут title
на случай, если пользователь не может увидеть страницу и использует инструмент чтения с экрана. Например, так:
<iframe title="Страница в Википедии о лемурах" src="https://ru.wikipedia.org/wiki/Обыкновенные_лемуры"></iframe>
<iframe title="Страница в Википедии о лемурах" src="https://ru.wikipedia.org/wiki/Обыкновенные_лемуры"></iframe>
На практике
СкопированоДока Дог советует
Скопировано🛠 Я редко использую <iframe>
. Только когда надо, например, встроить видео с YouTube.
Почти всегда лучше настроить заголовок cross
(это делается на уровне сервера) так, чтобы сторонние сайты не могли встраивать к себе ваш сайт как фрейм — это часто используется для всяких махинаций.
Если вы нашли ошибку, отправьте нам пул-реквест!
Во время отправки формы что-то пошло не так. Попробуйте ещё раз?
←
<video>
ctrl + alt + ←
→
<source>
ctrl + alt + →
Обязательные HTML-элементы веб-страницы
Если вы еще не совсем запутались после краткого введения в HTML в прошлом месяце, сейчас я расскажу вам еще кое-что. Получите краткую информацию о некоторых из самых основных элементов.
Как вы узнали из первого раунда основ веб-разработки, веб-сайты создаются с помощью HTML, а HTML вращается вокруг тегов. Теги не отображаются в вашем веб-браузере, они используются веб-браузером для интерпретации и отображения содержимого, такого как «заголовок», «абзац», «таблица» и т. д. Есть некоторые теги, которые должны работать на КАЖДОЙ веб-странице. Кто они такие?
Теги, которые никогда не выйдут из моды DOCTYPE каждую веб-страницу. Вы найдете его в самом верху каждой веб-страницы, и он сообщает веб-браузеру, что это файл HTML и какая у него версия HTML. Хотя технически это не HTML-элемент, каждый HTML-документ должен начинаться с тега DOCTYPE.
HTML
Эти (парные) теги окружают все в документе с кодом (кроме тега DOCTYPE) и сообщают вашему браузеру, что он просматривает HTML-документ. Вы найдете HTML-теги только в начале и конце каждого документа с кодом в виде открывающего и закрывающего тегов.
Заголовок
Теги заголовка окружают метаданные и являются невизуальными элементами на результирующей веб-странице (за исключением тега заголовка, который определяет, что отображается на вкладке браузера вашей веб-страницы). Эти теги вложены в теги HTML (перед тегом body) и включают такие элементы, как название веб-сайта, метаданные и ссылки на внешние файлы. Эти описательные теги содержат информацию, которую ищут веб-браузеры и поисковые системы. Наиболее важными из них являются тип мета-контента, заголовок, мета-описание и область просмотра.
В 90-х наличие как можно большего количества метатегов помогло бы SEO вашего сайта; сегодня, это не та же история. Вот еще немного информации о том, какие метатеги важны в 2017 году:
— Тип метаконтента Тег Если вы не укажете область просмотра, ваш мобильный пользовательский интерфейс может быть плохим.
Body
Хотя теги body также вложены в теги HTML, они не вложены ни в какие другие теги. Они следуют за тегами заголовка и похожи тем, что являются «обертками» для содержимого сайта. Однако, в отличие от тегов заголовка, теги тела создают визуальный контент на веб-сайте. Все, что вы можете увидеть на веб-сайте, вложено в теги body.
Так много информации, но еще больше предстоит узнать! Следите за предстоящими сообщениями в блогах, в которых вы сможете глубже погрузиться в другие темы веб-разработки. P.S. Если вы хотите поиграть с некоторыми из этих тем, вы можете создать свой собственный простой «шаблон» здесь .
Even More
Даже специалисты знают, когда обращаться за помощью, а когда проводить исследования. Если вы хотите узнать больше о некоторых из этих необходимых элементов, я предоставил несколько надежных источников ниже, и следите за обновлениями для моего следующего поста. Он сосредоточится на общих элементах веб-страниц HTML.
Moz
— Теги заголовка
— Метатеги
— Метаописание
HTML.com
— Тип документа
— Теги тела
W3Schools
— Теги HTML
— Теги заголовка
Написание представлений | Документация Django
Функция представления, или сокращенно представление , — это функция Python, которая принимает
веб-запрос и возвращает веб-ответ. Этот ответ может быть содержимым HTML
веб-страницы, перенаправления, ошибки 404, XML-документа или изображения.
. . или что-нибудь, на самом деле. Само представление содержит любую произвольную логику.
необходимо вернуть этот ответ. Этот код может жить где угодно, пока
так как это на вашем пути Python. Других требований нет — никакой «магии», так что
говорить. Ради поставить код где-то , по соглашению
поместите представления в файл с именем views.py
, размещенный в вашем проекте или
каталог приложения.
Простое представление
Вот представление, которое возвращает текущую дату и время в виде HTML-документа:
из django.http import HttpResponse импорт даты и времени определение current_datetime (запрос): сейчас = datetime.datetime.now() html = "Сейчас %s." % сейчас вернуть HttpResponse (html)
Давайте рассмотрим этот код по одной строке за раз:
Сначала мы импортируем класс
HttpResponse
из Модульdjango.http
вместе с библиотекой Python
. datetimeЗатем мы определяем функцию с именем
current_datetime
. это вид функция. Каждая функция просмотра принимаетHttpRequest
object в качестве первого параметра, который обычно называетсяrequest
.Обратите внимание, что имя функции просмотра не имеет значения; это не обязательно быть назван определенным образом, чтобы Джанго мог его распознать. Были назвав его
current_datetime
здесь, потому что это имя ясно указывает что оно делает.Представление возвращает объект
HttpResponse
, который содержит сгенерированный ответ.Каждая функция просмотра отвечает за возвращает объект
HttpResponse
. (Есть исключения, но мы вернемся к ним позже.)
Часовой пояс Django
Django включает параметр TIME_ZONE
, который по умолчанию равен Америка/Чикаго
. Вероятно, это не то место, где вы живете, поэтому вы можете захотеть
чтобы изменить его в файле настроек.Сопоставление URL-адресов с представлениями
Итак, напомним, что эта функция представления возвращает HTML-страницу, содержащую текущую Дата и время. Чтобы отобразить это представление по определенному URL-адресу, вам необходимо создать URLconf ; инструкции смотрите в диспетчере URL.
Возврат ошибок
Django предоставляет помощь для возврата кодов ошибок HTTP. Есть подклассы HttpResponse
для ряда распространенных кодов состояния HTTP
кроме 200 (что означает «ОК» ). Вы можете найти полный список доступных
подклассы в запросе/ответе
документация. Возвращайте экземпляр одного из этих подклассов вместо
нормальный
HttpResponse
из django.http import HttpResponse, HttpResponseNotFound защита my_view (запрос): # ... если фу: return HttpResponseNotFound("Страница не найдена
") еще: return HttpResponse("Страница найдена
")
Не существует специализированного подкласса для каждого возможного кода ответа HTTP,
так как многие из них не будут такими обычными. Однако, как задокументировано в
документацию HttpResponse
, вы также можете передать
Код состояния HTTP в конструктор для HttpResponse
чтобы создать класс возврата для любого кода состояния, который вам нравится. Например:
из django.http import HttpResponse защита my_view (запрос): # ... # Вернуть "созданный" (201) код ответа. вернуть HttpResponse (статус = 201)
Поскольку ошибка 404 является наиболее распространенной ошибкой HTTP, существует более простой способ:
для обработки этих ошибок.
Исключение
Http404
- класс
django.http.
HTTP404
При возврате ошибки, такой как HttpResponseNotFound
,
вы несете ответственность за определение HTML результирующей страницы с ошибкой:
return HttpResponseNotFound("Страница не найдена
")
Для удобства и потому, что рекомендуется иметь единую страницу с ошибкой 404.
на вашем сайте Django предоставляет исключение Http404
. Если вы поднимете Http404
в любой точке функции представления Django поймает ее и вернет
стандартная страница ошибки для вашего приложения, а также код ошибки HTTP 404.
Пример использования:
из django.http import Http404 из django.shortcuts импортировать рендеринг из polls.models импортировать опрос Деталь защиты (запрос, poll_id): пытаться: p = Poll.objects.get(pk=poll_id) кроме Poll.DoesNotExist: поднять Http404 ("Опрос не существует") return render(запрос, "polls/detail.html", {"poll": p})
Чтобы отображать настроенный HTML, когда Django возвращает 404, вы можете создать
HTML-шаблон с именем 404.html
и поместите его на верхний уровень вашего
дерево шаблонов. Затем этот шаблон будет обслуживаться при установке DEBUG
.
на Ложь
.
Когда DEBUG
равно True
, вы можете отправить сообщение на Http404
и
он появится в стандартном шаблоне отладки 404. Используйте эти сообщения для
цели отладки; как правило, они не подходят для использования в производстве 404
шаблон.
Настройка представлений ошибок
Представлений ошибок по умолчанию в Django должно быть достаточно для большинства веб-приложений, но его можно легко переопределить, если вам нужно какое-либо пользовательское поведение. Укажите обработчики, как показано ниже в вашем URLconf (установка их где-либо еще не будет иметь эффект).
Представление page_not_found()
переопределяется обработчик404
:
обработчик404 = "mysite.views.my_custom_page_not_found_view"
Представление server_error()
переопределяется обработчик500
:
обработчик500 = "mysite.views.my_custom_error_view"
Представление permission_denied()
переопределяется обработчик403
:
обработчик403 = "mysite.views.my_custom_permission_denied_view"
Представление bad_request()
переопределяется обработчик400
:
обработчик400 = "mysite.views.my_custom_bad_request_view"
См. также
Используйте настройку CSRF_FAILURE_VIEW
для переопределения ошибки CSRF.
вид.
Тестирование пользовательских представлений ошибок
Чтобы проверить ответ пользовательского обработчика ошибок, создайте соответствующее исключение в тестовом представлении. Например:
из django.core.exceptions import PermissionDenied из django.http импорт HttpResponse из django.test импортировать SimpleTestCase, override_settings из пути импорта django.urls def response_error_handler (запрос, исключение = нет): return HttpResponse("Содержимое обработчика ошибок", status=403) def permission_denied_view (запрос): поднять PermissionDenied URL-шаблоны = [ путь("403/", разрешение_отклонено_просмотр), ] обработчик403 = ответ_ошибка_обработчик # ROOT_URLCONF должен указывать модуль, содержащий handler403 = ... @override_settings(ROOT_URLCONF=__имя__) класс CustomErrorHandlerTests (SimpleTestCase): защита test_handler_renders_template_response (сам): ответ = self.client.get("/403/") # Делайте утверждения по ответу здесь. Например: self.assertContains (ответ, «Содержимое обработчика ошибок», status_code = 403)
Асинхронные представления
Представления могут быть не только синхронными функциями, но и асинхронными.
(«асинхронные») функции, обычно определяемые с использованием синтаксиса Python async def
.
Django автоматически обнаружит их и запустит в асинхронном контексте.