Создание тегов устройств и управление ими — Windows security
- Чтение занимает 2 мин
В этой статье
Важно!
Улучшенный Центр безопасности Microsoft 365 теперь доступен в открытой предварительной версии.The improved Microsoft 365 security center is now available in public preview. Этот новый опыт выводит Защитник для конечной точки, Защитник Для Office 365, Microsoft 365 Defender и другие возможности в Центре безопасности Microsoft 365.This new experience brings Defender for Endpoint, Defender for Office 365, Microsoft 365 Defender, and more into the Microsoft 365 security center. Узнайте, что нового.Learn what’s new. Этот раздел может быть применим как к Microsoft Defender для endpoint, так и к Microsoft 365 Defender.
Относится к:Applies to:
Хотите испытать Microsoft Defender для конечной точки?Want to experience Microsoft Defender for Endpoint? Зарегистрируйтесь для получения бесплатной пробной версии.Sign up for a free trial.
Вы можете добавлять теги на устройства следующими способами:You can add tags on devices using the following ways:
- Использование порталаUsing the portal
- Установка значения ключа реестраSetting a registry key value
Примечание
Между временем, когда тег добавляется на устройство, и его доступностьм в списке устройств и на странице устройства, может быть задержка.There may be some latency between the time a tag is added to a device and its availability in the devices list and device page.
Чтобы добавить теги устройств с помощью API, см. API добавления и удаления тегов устройств. To add device tags using API, see Add or remove device tags API.
Выберите устройство, на которое вы хотите управлять тегами.Select the device that you want to manage tags on. Вы можете выбрать устройство или найти его в любом из следующих представлений:You can select or search for a device from any of the following views:
Панель мониторинга операций безопасности
Очередь оповещений— выберите имя устройства рядом со значком устройства в очереди оповещений.Alerts queue — Select the device name beside the device icon from the alerts queue.
Список устройств— выберите имя устройства из списка устройств.Devices list — Select the device name from the list of devices.
Поле поиска — выберите «Устройство» в выпадающее меню и введите имя устройства.Search box — Select Device from the drop-down menu and enter the device name.
Можно также попасть на страницу оповещений через представления файла и IP.You can also get to the alert page through the file and IP views.
Выберите «Управление тегами» в строке действий ответа.Select Manage Tags from the row of Response actions.
Введите, чтобы найти или создать тегиType to find or create tags
Теги добавляются в представление устройства и также отражаются в представлении списка устройств.
Примечание
Фильтрация может не работать с именами тегов, которые содержат скобки.Filtering might not work on tag names that contain parenthesis.
При создании нового тега отображается список существующих тегов.When you create a new tag, a list of existing tags are displayed. В списке показаны только теги, созданные на портале.The list only shows tags created through the portal. Существующие теги, созданные на клиентских устройствах, не отображаются.Existing tags created from client devices will not be displayed.
Вы также можете удалить теги из этого представления.You can also delete tags from this view.
Примечание
Применимо только на следующих устройствах:Applicable only on the following devices:
- Windows 10 версии 1709 или более позднейWindows 10, version 1709 or later
- Windows Server версии 1803 или более позднейWindows Server, version 1803 or later
- Windows Server 2016Windows Server 2016
- WindowsServer2012R2Windows Server 2012 R2
- Windows Server 2008 R2 с пакетом обновления 1 (SP1)Windows Server 2008 R2 SP1
- Windows 8. 1Windows 8.1
- Windows 7 с пакетом обновления 1 (SP1)Windows 7 SP1
Примечание
Максимальное число символов, которое можно установить в теге, — 200.The maximum number of characters that can be set in a tag is 200.
Устройства с похожими тегами могут быть удобными, если вам нужно применить контекстное действие к определенному списку устройств.Devices with similar tags can be handy when you need to apply contextual action on a specific list of devices.
Используйте следующую запись реестра для добавления тега на устройство:Use the following registry key entry to add a tag on a device:
- Раздел реестра:Registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection\DeviceTagging\
- Значение ключа реестра (REG_SZ):Registry key value (REG_SZ):
Group
- Данные ключа реестра:Registry key data:
Name of the tag you want to set
Примечание
Тег устройства является частью отчета сведений об устройстве, который создается один раз в день.
Если необходимо удалить тег, добавленный с помощью вышеуказанного ключа реестра, удалите содержимое данных ключа реестра, а не ключ «Группа».If you need to remove a tag that was added using the above Registry key, clear the contents of the Registry key data instead of removing the ‘Group’ key.
git tag | Atlassian Git Tutorial
Использование тегов
В этом документе описываются концепция использования тегов в Git и команда git tag
. Теги — это ссылки, указывающие на определенные точки в истории Git. Команда git tag обычно используется для захвата некой точки в истории, которая используется для релиза нумерованной версии (например, v1. 0.1). Теги похожи на неизменяемые ветки, но они, в отличие от веток, не имеют истории коммитов после создания. Подробнее о ветках см. на странице, посвященной git branch
. В этом документе описываются различные виды тегов, способы их создания, просмотра, удаления, предоставления доступа к ним и многое другое.
Создание тега
Для создания нового тега выполните следующую команду:
Замените семантическим идентификатором состояния репозитория на момент создания тега. Стандартный шаблон для указания номеров версий выглядит как
git tag v1.4
. Git поддерживает два типа тегов: аннотируемые и облегченные. В предыдущем примере был создан облегченный тег. Облегченные и аннотируемые теги отличаются объемом хранящихся в них сопутствующих метаданных. Рекомендуется рассматривать аннотируемые теги как открытые, а облегченные — как закрытые. В аннотируемых тегах хранятся дополнительные метаданные, такие как имя создателя тега, адрес электронной почты и дата. Это важные данные для версии общего пользования. Облегченные теги по сути являются «закладками» для коммитов. Это просто имя и указатель на коммит, что удобно для создания быстрых ссылок на соответствующие коммиты.
Аннотируемые теги
Аннотируемые теги хранятся в базе данных Git в виде полных объектов. Напомним, в них находятся дополнительные метаданные, такие как имя создателя тега, адрес электронной почты и дата. Аналогично комментариям к коммитам существуют комментарии к аннотируемым тегам. Кроме того, для обеспечения безопасности аннотируемые теги можно подписывать и проверять с помощью GNU Privacy Guard (GPG). Рекомендуется использовать аннотированные, а не облегченные теги, чтобы иметь доступ ко всем связанным метаданным.
При выполнении этой команды будет создан аннотируемый тег с идентификатором v1.4
. Затем команда откроет настроенный текстовый редактор по умолчанию, чтобы запросить ввод дальнейших метаданных.
git tag -a v1.4 -m "my version 1. 4"
Эта команда аналогична предыдущей, однако в этой версии передаются параметр -m
и комментарий. Этот удобный способ похож на команду git commit -m
, так как с его помощью новый тег создается без открытия локального текстового редактора. Вместо этого применяется комментарий, переданный после параметра -m
.
Облегченные теги
При выполнении этой команды создается облегченный тег с идентификатором v1.4-lw
. Облегченные теги создаются, когда не используются параметры -a
, -s
или -m
. Этот тип тегов создает новую контрольную сумму тега и сохраняет ее в каталоге .git/
репозитория проекта.
Просмотр тегов
Чтобы просмотреть список сохраненных в репозитории тегов, выполните следующую команду.
Она выведет список тегов:
v0.10.0
v0.10.0-rc1
v0.11.0
v0.11.0-rc1
v0.11.1
v0.11.2
v0. 12.0
v0.12.0-rc1
v0.12.1
v0.12.2
v0.13.0
v0.13.0-rc1
v0.13.0-rc2
Чтобы уточнить список тегов, можно передать параметр -l
и выражение с подстановочными знаками:
$ git tag -l *-rc*
v0.10.0-rc1
v0.11.0-rc1
v0.12.0-rc1
v0.13.0-rc1
v0.13.0-rc2
v0.14.0-rc1
v0.9.0-rc1
v15.0.0-rc.1
v15.0.0-rc.2
v15.4.0-rc.3
В указанном выше примере используются параметр -l
и выражение с подстановочными знаками -rc
, возвращающее список всех тегов с префиксом -rc
, который обычно используется для обозначения предвыпускных релизов.
Применение тегов к старым коммитам
В предыдущих примерах использования тегов демонстрируются операции без указания коммита. По умолчанию команда git tag
создает тег для коммита, на который ссылается указатель HEAD
. Вместо этого в git tag
можно передать ссылку на конкретный коммит. В этом случае тег будет создан для указанного коммита, а не для коммита, на который ссылается указатель HEAD
. Чтобы просмотреть список предыдущих коммитов, запустите команду git log
.
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'feature'
a6b4c97498bd301d84096da251c98a07c7723e65 add update method for thing
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
При выполнении команды git log
будет выведен список коммитов. В этом примере мы создадим тег для самого верхнего коммита Merge branch 'feature'
. Нам понадобится ссылка на SHA-хеш коммита, который мы передадим Git:
git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6
При выполнении приведенной выше команды git tag
будет создан аннотируемый тег с идентификатором v1. 2
для коммита, который мы выбрали в предыдущем примере с командой git log
.
Переназначение тегов. Замена старых тегов
Если вы попытаетесь создать тег с таким же идентификатором, как у существующего тега, Git выдаст ошибку, как показано ниже:
fatal: tag 'v0.4' already exists
Кроме того, если вы попытаетесь создать тег для старого коммита с существующим идентификатором тега, Git выдаст такую же ошибку.
Если вам необходимо обновить существующий тег, используйте параметр -f
(«force»).
git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6
Указанная выше команда сопоставит коммит 15027957951b64cf874c3557a0f3547bd83b3ff6
с идентификатором тега v1.4
и переопределит любой существующий контент для тега v1.4
.
Публикация: отправка тегов в удаленный репозиторий
Публикация тегов похожа на отправку веток. По умолчанию команда git push
не отправляет теги. Их необходимо указать в команде git push
явным образом.
$ git push origin v1.4
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To [email protected]:atlasbro/gittagdocs.git
* [new tag] v1.4 -> v1.4
Для одновременной отправки сразу нескольких тегов необходимо указать в команде git push
параметр --tags
. Когда другие пользователи будут клонировать репозиторий или выполнять для репозитория команду pull, они получат новые теги.
Переключение тегов
Вы можете просмотреть состояние репозитория по тегу с помощью команды git checkout
.
Указанная выше команда выполнит переход к тегу v1.4
. При этом репозиторий перейдет в состояние открепленного указателя HEAD
. Это значит, что любые внесенные изменения не будут добавлены в этот тег. Они попадут в новый открепленный коммит, который не будет принадлежать ни к какой ветке, и перейти на него можно будет только напрямую по SHA-хешу этого коммита. Поэтому рекомендуется создавать новую ветку каждый раз, когда вы вносите изменения, находясь в состоянии открепленного указателя HEAD
.
Удаление тегов
Удаление тегов — довольно простая операция. Чтобы удалить определенный тег, передайте команде git tag
параметр -d
и идентификатор этого тега.
$ git tag
v1
v2
v3
$ git tag -d v1
$ git tag
v2
v3
В этом примере при выполнении команды git tag
отобразился список тегов: v1, v2, v3. Затем была запущена команда git tag -d v1
, которая удалила тег v1.
Резюме
Итак, теги — это дополнительный механизм для создания снимков состояния репозитория Git. Обычно теги используются для создания семантических идентификаторов номера версии, которые соответствуют циклам релизов программного обеспечения. Для создания, изменения и удаления тегов используется команда git tag
. Существует два типа тегов: аннотируемые и облегченные. Обычно рекомендуется использовать аннотируемые теги, поскольку в них хранятся дополнительные важные метаданные об этом теге. В этом документе также упоминаются другие команды Git — git push
и git checkout
. Более подробную информацию об их использовании см. на соответствующих страницах.
Создание теги, метки или хэштеги в MODx
В этой статье рассмотрим, как в MODX с помощью дополнения Tagger добавить к ресурсам метки или хэштеги, а также как их использовать для поиска соответствующих ресурсов и создания облака тегов.
Установка Tagger и pdoTools
Для создания тегов к статьям, облака тегов и страницы, которая будет выводить ресурсы в соответствии с переданным ей тегом, будем использовать компоненты Tagger и pdoTools.
Установку необходимых компонентов произведём на странице «Управление пакетами» (Приложения -> Установщик):
- Tagger — компонент, который добавляет в MODX теги, категории и многое другое.
- pdoTools — компонент, представляющий собой набор сниппетов, позволяющих решить очень большое количество задач. На этом уроке будем использовать сниппеты
pdoResources
иpdoPage
.
Компонент Tagger
Работу с Tagger начнём с создания группы и тегов в ней. Для этого в верхнем меню нажмем на пункт Приложения и выберем подпункт Tagger. На открывшейся странице перейдём на вкладку Group и создадим новую группу с помощью кнопки «Create a new Group».
Основные поля:
name
— название группы (tags).description
— описание группы (теги к статьям).place
— место отображение тегов (in tab — во вкладке).show for templates
— для каких шаблонов отображать группу (2 — id шаблона статей).allow blank
— определяет, можно ли не указывать теги.
Внимание: Работа с Tagger всегда начинается с создания группы, т.к. теги не могут сами по себе существовать, они должны принадлежать к той или иной группе.
Перейдём на вкладку Tags и создадим теги в группе tags.
Основные поля:
name
— имя тега (например, HTML)alias
— псевдоним тега (например, html)group
— группа (выбираем ранее созданную группу tags)
После этого создадим ещё несколько тегов.
Добавим к статьям, имеющим шаблон Пост (id=2), теги. Добавление тегов осуществляется во вкладке Tagger.
Создание ресурса — Вывод статей по тегу
Создадим ресурс «Вывод статей по тегу» и шаблон, который свяжем с ним. Результат данного действия показан на рисунке. Во вкладке «Настройки» укажем данному ресурсу URI — show-posts
. Запомним идентификатор (id
) данного ресурса (например, 20).
Вывод тегов, прикреплённых к статье
Для вывода тегов, добавленных к статье необходимо открыть шаблон (Пост) и вставить в него вызов сниппета TaggerGetTags
:
[[TaggerGetTags?
&resources=`[[*id]]`
&rowTpl=`@INLINE <div><span>#</span><a href="[[~20]]?tag=[[+alias]]">[[+tag]]</a></div>`
]]
Параметр:
&rowTpl
— чанк, который используется для вывода каждого тега.
Плейсхолдеры:
[[+alias]]
— псевдоним тега.[[+tag]]
— имя тега.
Вывод тегов организуем с помощью ссылок, каждая из которых будет иметь следующее значение атрибута href
:
[[~20]]?tag=[[+alias]]
где:
[[~20]]
— URL ресурса «Вывод статей по тегу». Данный ресурс будем использовать для вывода статей, имеющих указанный тег.[[+alias]]
— значение передаваемого GET-параметраtag
. Данное значение будем использовать в ресурсе[[~20]]
для создания запроса к базе данных, выбирающих из неё только записи, имеющие этот тег.
Создание облака тегов
Для создания облака тегов воспользуемся сниппетом pdoResources
. Но перед тем как переходить к выборке, рассмотрим MySQL схему компонента Tagger. Данная схема отображает связь между таблицами (классами) компонента Tagger и modResource.
Из схемы видно, что компонент Tagger состоит из 3 таблиц (классов):
TaggerTag
— список тегов.TaggerTagResource
— связываетmodResource
иTaggerTag
. Т.е. каждая строчка содержитid
тега иid
ресурса.TaggerGroup
— список групп.
Класс modResource
приведён для наглядности.
Для создания облака тегов необходимо воспользуемся сниппетом pdoResources
:
[[!pdoResources?
&loadModels=`tagger`
&class=`TaggerTag`
&leftJoin=`{
"TaggerTagResources": {
"class": "TaggerTagResource",
"on": "TaggerTag.id = TaggerTagResources.tag"
}
}`
&select=`{
"TaggerTag": "*",
"TaggerTagResources": "COUNT(TaggerTagResources.tag) as countTags"
}`
&groupby=`TaggerTag.id`
&sortby=`TaggerTag.tag`
&sortdir=`ASC`
&tplWrapper=`@INLINE <div><div><span></span> Теги</div><div>[[+output]]</div></div>`
&tpl=`@INLINE <a href="[[~20]]?tag=[[+alias]]">[[+tag]] <span>[[+countTags]]</span></a>`
]]
Вставим вышепредставленный код, например, в правую колонку шаблона Пост.
Реализация страницы «Вывод статей по тегу»
Данная страница будет выводить список статей, которые имеют указанный тег. Как Вы уже наверно догадались, получать тег эта страница будет из URL (из GET параметра tag
).
Рассмотрим этот момент более подробно. На страницах каждый тег оформлен в виде ссылки, которая имеет в своём составе параметр tag
.
Например, тег bootstrap имеет следующий URL:
http://site.ru/show-posts?tag=bootstrap
Следовательно, для того чтобы вывести соответствующие ресурсы необходимо:
- Получить значение параметра
tag
из массива GET. - Создать запрос для выборки необходимых данных.
- Указать данному запросу условие (
where
). Т.е. ограничить выборку только теми записями, которые имеют указанный тег. - Создать чанк для оформления результатов.
Вставим в шаблон «Статьи по тегу» базовый каркас страницы и вызов сниппета pdoPage
:
[[!pdoPage?
&element = `pdoResources`
&limit=`2`
&loadModels=`tagger`
&class=`TaggerTagResource`
&leftJoin=`{
"NameTag": {
"class": "TaggerTag",
"on": "TaggerTagResource. tag = NameTag.id"
},
"Posts": {
"class": "modResource",
"on": "TaggerTagResource.resource = Posts.id"
}
}`
&select=`{
"TaggerTagResource": "*",
"NameTag": "NameTag.tag, NameTag.alias",
"Posts": "Posts.id, Posts.pagetitle, Posts.description"
}`
&where=`{
"NameTag.alias": "[[!#GET.tag]]"
}`
&sortby=`TaggerTagResource.resource`
&sortdir=`ASC`
&tplWrapper =`@INLINE <h3>Всего результатов: [[+page.total]]</h3>[[+output]]`
&tpl= `chunkTagRow`
]]
[[!+page.nav]]
Чанк chunkTagRow:
<div>
<div>
<h4>[[+pagetitle]]</h4><p>[[+description]]</p>
<p><a href="[[~[[+id]]]]" role="button">Читать далее... </a></p>
</div>
</div>
Собственные шаблонные теги и фильтры — Документация Django 1.
9Шаблонизатор Django содержит большое количество встроенных тегов и фильтров. Тем не менее, вам может понадобиться добавить собственный функционал к шаблонам. Вы можете сделать это добавив собственную библиотеку тегов и фильтров используя Python, затем добавить ее в шаблон с помощью тега {% load %}
.
Добавление собственной библиотеки
Обычно шаблонные теги и фильтры располагаются в приложении Django. Если они связаны с существующим приложением, это логично расположить его там. Иначе можно добавить их в новое приложение. Если приложение Django добавлено INSTALLED_APPS
, все библиотеки тегов, расположенные в определенном модуле приложения, будут доступны для загрузки в шаблонах.
Приложение должно содержать каталог templatetags
на том же уровне что и models.py
, views.py
и др. Если он не существует, создайте его. Не забудьте создать файл __init__.py
чтобы каталог мог использоваться как пакет Python.
Сервер для разработки не перезапускается автоматически
После добавления модуля templatetags
вам необходимо перезапустить сервер, чтобы использовать теги и фильтры в шаблонах.
Выше теги и фильтры будут находиться в модуле пакета templatetags
. Название модуля будет использоваться при загрузке библиотеки в шаблоне, так что убедитесь что оно не совпадает с названиями библиотек других приложений.
Например, если теги/фильтры находятся в файле poll_extras.py
, ваше приложение может выглядеть следующим образом:
polls/ __init__.py models.py templatetags/ __init__.py poll_extras.py views.py
И в шаблоне вы будете использовать:
Приложение содержащее собственные теги и фильтры должно быть добавлено в INSTALLED_APPS
, чтобы тег {% load %}
мог загрузить его. Это сделано в целях безопасности.
Не имеет значение сколько модулей добавлено в пакет templatetags
. Помните что тег {% load %}
использует название модуля, а не название приложения.
Библиотека тегов должна содержать переменную register
равную экземпляру template.Library
, в которой регистрируются все определенные теги и фильтры. Так что в начале вашего модуля укажите следующие строки:
from django import template register = template.Library()
Добавлено в Django 1.9.
Модуль с шаблонными тегами можно также зарегистрировать через аргумент 'libraries'
класса DjangoTemplates
. Это полезно, если вы хотите изменить название библиотеки тегов. Также вы можете зарегистрировать библиотеку без установки приложения.
За кулисами
Вы можете найти большое количество примеров в исходном коде встроенных тегов и фильтров Django. Они находятся в файлах django/template/defaultfilters.py
и django/template/defaulttags.py
.
Подробности о теге load
читайте в этой документации.
Создание собственного шаблонного фильтра
Фильтры это просто функции Python, которые принимают один или несколько аргументов:
Входящее значение – не обязательно строка.
Значение аргументов – можно указать значение по умолчанию или вообще не использовать аргументы.
Например, при {{ var|foo:"bar" }}
функция фильтра foo
будет выполнена со значением переменной var
и аргументом "bar"
.
Исключение, вызванное в шаблонном фильтре, приведет к серверной ошибке. По этому фильтр должен избегать исключений, если можно вернуть какое-то значение по умолчанию. Если же переданное значение явно ведет к багу, лучше вызвать исключение, чем скрыть баг.
Пример фильтра:
def cut(value, arg): """Removes all values of arg from the given string""" return value.replace(arg, '')
И пример как его использовать:
{{ somevariable|cut:"0" }}
Большинство фильтров не принимают аргументы. Например:
def lower(value): # Only one argument. """Converts a string into all lowercase""" return value.lower()
Регистрация фильтров
-
django.template.Library.
filter
()
Создав функцию фильтра, ее необходимо зарегистрировать в экземпляре Library
, чтобы использовать в шаблонах Django:
register.filter('cut', cut) register.filter('lower', lower)
Метод Library.filter()
принимает два аргумента:
Название фильтра – строка.
Функция компиляции – функция Python (не название функции строкой).
Вы можете использовать register.filter()
как декоратор:
@register.filter(name='cut') def cut(value, arg): return value.replace(arg, '') @register.filter def lower(value): return value.lower()
Если вы не укажете аргумент name
, как показано во втором примере, Django будет использовать название функции в качестве названия фильтра.
Также register.filter()
принимает три именованных аргумента: is_safe
, needs_autoescape
и expects_localtime
. Эти аргументы описан в разделе фильтры и автоматическое экранирование и в разделе фильтры и часовые пояса далее.
Шаблонные фильтры, которые обрабатывают строки
-
django.template.defaultfilters.
stringfilter
()
Если вы создали фильтр, который работает только со строками, используйте декоратор stringfilter
. Он преобразует объект в строковое значение перед передачей в функцию:
from django import template from django.template.defaultfilters import stringfilter register = template.Library() @register.filter @stringfilter def lower(value): return value.lower()
В этом случае вы можете передать число в фильтр и это не вызовет исключение AttributeError
(так как число не содержит метод lower()
).
Фильтры и автоматическое экранирование
Создавая собственный фильтр, учитывайте как он будет работать с политикой автоматического экранирования в Django. Есть три типа строк, которые могу передаваться в коде шаблона.
“Сырые” строки – это обычные типы Python
str
илиunicode
. При выводе они экранируются при включенном авто-экранировании, иначе – выводятся как есть.Безопасные строки – строки, которые были помечены как безопасные. Указывают на то, что последующее экранирование не требуется. Они обычно используются для строк, которые содержат готовый HTML, которые необходимо отобразить на странице.
Внутри эти строки представлены типами
SafeBytes
илиSafeText
. Эти типа наследуются от базового классаSafeData
, таким образом вы можете проверять их следующим образом:if isinstance(value, SafeData): # Do something with the "safe" string. ...
Строки с пометкой “требуют экранирования” – всегда экранируются при выводе, независимо от того находятся они в блоке
autoescape
или нет. Такие строки экранируются только один раз, независимо от того, включено автоматическое экранирование или нет.Внутренне эти строки представлены типами
EscapeBytes
илиEscapeText
. Вам не обязательно это знать, можно просто использовать фильтрescape
.
При создании фильтра вы можете столкнуться со следующими ситуациями:
Ваш фильтр не добавляет никаких не экранированных HTML-символов (
<
,>
,'
,"
or&
) в результат. В таком случае вы можете полностью положиться на политику автоматического экранирования Django. Для этого передайте параметрis_safe
с значениемTrue
при регистрации функции фильтра:@register.filter(is_safe=True) def myfilter(value): return value
Этот параметр указывает Django что фильтр никак не изменяет “безопасность” переданной строки. То есть, если передать в фильтр “безопасную” строку, результат также будет “безопасным” для Django, если же передать “небезопасную” строку, Django автоматически экранирует результат фильтра.
Другими словами можно сказать “этот фильтр безопасный – он никаким образом не добавляет небезопасный HTML в результат.”
Причина использования параметра
is_safe
состоит в том, что большинство операций со строками превращает объектSafeData
обратно в обычный объектstr
илиunicode
и чтобы не обрабатывать все эти ситуации самостоятельно, что может быть не просто, Django самостоятельно следит за изменениями.Например, у вас есть фильтр, который добавляет
xx
к концу переданного значения. Так как он не добавляет небезопасных HTML-символов в результат (кроме тех, которые присутствуют в переданном значении), вы должные пометить его с параметромis_safe
:@register.filter(is_safe=True) def add_xx(value): return '%sxx' % value
Если фильтр используется в шаблоне с включенным автоматическим экранированием, Django выполнит экранирование результата если входящие данные не были отмечены как “безопасные”.
По умолчанию
is_safe
равенFalse
.Будьте внимательны определяя безопасен ваш фильтр или нет. Если вы удаляете символы, вы можете случайно оставить открытые HTML теги или сущности(entities) в результате. Например, при удалении
>
из входящих данных<a>
может превратиться в<a
, который должен быть экранирован. Аналогично, удаление точки с запятой (;
) может превратить&
в&
, что не является правильной HTML-сущностью и должно быть экранировано. Большинство случаев будут не такими сложными, но вы должны быть внимательными.Параметр
is_safe
принуждает фильтр вернуть строку. Если ваш фильтр возвращает булево значение или не строку, использованиеis_safe
может привести к непредвиденным последствиям (например, конвертирование False в строку ‘False’).Фильтр самостоятельно заботится об экранировании результата. Это необходимо если вы добавляете новый HTML в результат. В таком случае результат должен быть помечен как безопасный чтобы избежать последующего экранирования.
Для этого используйте функцию
django.utils.safestring.mark_safe()
.Но будьте осторожны. Необходимо не просто пометить результат как безопасный. Вы должны убедиться что результат действительно безопасен независимо от того, включено автоматическое экранирование или нет. Идея в том, чтобы фильтр правильно работал как при включенном автоматическом экранировании, так и выключенном.
Для того, чтобы фильтр знал включено ли автоматическое экранирование, передайте параметр
needs_autoescape
со значениемTrue
при регистрации функций фильтра. (По умолчанию значение равноFalse
). Этот параметр указывает Django что необходимо передать именованный аргументautoescape
при вызове функции фильтра, который равенTrue
, если включено автоматическое экранирование, иначеFalse
. Рекомендуем по умолчанию указатьTrue
вautoescape
, чтобы при вызове функции в коде, экранирование было включено.Например, давайте создадим фильтр, который выделяет первый символ строки:
from django import template from django.utils.html import conditional_escape from django.utils.safestring import mark_safe register = template.Library() @register.filter(needs_autoescape=True) def initial_letter_filter(text, autoescape=True): first, other = text[0], text[1:] if autoescape: esc = conditional_escape else: esc = lambda x: x result = '<strong>%s</strong>%s' % (esc(first), esc(other)) return mark_safe(result)
Параметр
needs_autoescape
и аргументautoescape
информируют фильтр о том, было ли включено автоматическое экранирование при вызове фильтра. Аргументautoescape
указывает необходимо ли использоватьdjango.utils.html.conditional_escape
для входящих данных. (В нашем примере мы использовали его для определения функции “escape”.) Функцияconditional_escape()
как иescape()
, но использует экранирование только для не безопасных(SafeData
) строк. Если передать объектSafeData
функцияconditional_escape()
вернет его без изменений.Также мы пометили результат как безопасный и он будет вставлен непосредственно в шаблон без повторного экранирования.
В этом случае нет необходимости беспокоиться о параметре
is_safe
. Так как вы самостоятельно учитываете автоматическое экранирование, параметрis_safe
ничего не изменит.
Предупреждение
Защита от XSS уязвимостей при использовании встроенных фильтров.
Изменено в Django 1.8.
Фильтры Django используют autoescape=True
, чтобы избежать XSS уязвимостей.
В предыдущих версиях Django autoescape
равен None
по умолчанию, будьте осторожны при использовании фильтров в коде. Вам необходимо передать autoescape=True
, чтобы активировать экранирование.
Например, если вы хотите написать фильтр urlize_and_linebreaks
, который использует фильтры urlize
и linebreaksbr
, он будет выглядеть следующим образом:
from django.template.defaultfilters import linebreaksbr, urlize @register.filter(needs_autoescape=True) def urlize_and_linebreaks(text, autoescape=True): return linebreaksbr( urlize(text, autoescape=autoescape), autoescape=autoescape )
Тогда:
{{ comment|urlize_and_linebreaks }}
можно использовать вместо:
{{ comment|urlize|linebreaksbr }}
Фильтры и временные зоны
Если вы создаете фильтр, который обрабатывает объекты datetime
, скорее всего вы будете использовать параметр expects_localtime
со значением True
:
@register.filter(expects_localtime=True) def businesshours(value): try: return 9 <= value. hour < 17 except AttributeError: return ''
Если этот флаг установлен и первый аргумент вашего фильтра является значением времени с часовым поясом, Django преобразует это значение в текущий часовой пояс перед тем как передать в фильтр, в соответствии с правилами преобразования часовых поясов в шаблонах.
Создание собственного шаблонного тега
Теги сложнее чем фильтры, они позволяют делать что угодно. Django предоставляет инструменты, которые упрощают создания различных тегов. Первым делом мы изучим их, затем узнаем как создать тег с нуля.
Простые теги
-
django.template.Library.
simple_tag
()
Большинство тегов принимают определенное количество аргументов – строки или переменные шаблона – и возвращают строку после обработки аргументов. Например, тег current_time
принимает строку с форматом и возвращает время строкой в этом формате.
Для создания подобных тегов, Django предоставляет функцию simple_tag
. Эта функция, которая является методом django.template.Library
, принимает функцию принимающую любое количество аргументов, оборачивает функцией render
и регистрирует в системе шаблонов.
Функцию current_time
можно переписать следующим образом:
import datetime from django import template register = template.Library() @register.simple_tag def current_time(format_string): return datetime.datetime.now().strftime(format_string)
Несколько вещей которые следует помнить о функции simple_tag
:
Проверка количества обязательных аргументов и др. выполняется до вызова функции, вам не нужно этого делать.
Кавычки вокруг строк уже удалены, аргумент будет содержать готовую строку.
Если аргумент является переменной шаблона, наша функция получит ее значение.
В отличии от других утилит тегов, simple_tag
обрабатывает результат функцией conditional_escape()
, если контекст шаблона в режиме автоматического экранирования, чтобы убедиться в правильности HTML и защитить вас от XSS атак.
Если экранирование не нужно, вы можете использовать функцию mark_safe()
, если вы абсолютно уверены, что ваш код не содержит XSS уязвимостей. Для создание небольших кусков HTML настоятельно рекомендуется использовать format_html()
вместо mark_safe()
.
Было добавлено автоматическое экранирование для simple_tag
.
Если тегу необходим текущий контекст, используйте параметр takes_context
при регистрации тега:
@register.simple_tag(takes_context=True) def current_time(context, format_string): timezone = context['timezone'] return your_get_current_time_method(timezone, format_string)
Заметим, что первый параметр должен называться context
.
Подробности о параметре takes_context
смотрите в разделе о включающих тегах.
Если вам нужно изменить название тега, передайте его параметром:
register.simple_tag(lambda x: x - 1, name='minusone') @register. simple_tag(name='minustwo') def some_function(value): return value - 2
Теги, зарегистрированные через simple_tag
могут принимать любое количество позиционных или именованных аргументов. Например:
@register.simple_tag def my_tag(a, b, *args, **kwargs): warning = kwargs['warning'] profile = kwargs['profile'] ... return ...
Теперь в тег можно передать любое количество позиционных аргументов, разделенных пробелами. Как и в Python, значения для именованных аргументов можно указать, используя знак “=
” после именованных аргументов. Например:
{% my_tag 123 "abcd" book.title warning=message|lower profile=user.profile %}
Добавлено в Django 1.9.
Вы можете добавить результат в переменную шаблона, используя аргумент as
и название переменной, и использовать его при необходимости:
{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %} <p>The time is {{ the_time }}.</p>
Включающие теги
-
django. template.Library.
inclusion_tag
()
Еще один тип тегов – это теги, которые выполняют другой шаблон и показывают результат. Например, интерфейс администратора Django использует включающий тег для отображения кнопок под формой на страницах добавления/редактирования объектов. Эти кнопки выглядят всегда одинаково, но ссылки зависят от текущего объекта – небольшой шаблон, который выполняется с данными из текущего объекта, удобно использовать в данном случае. (В приложении администратора это тег submit_row
.)
Такие теги называются “включающие теги”.
Лучше пояснить на примере. Давайте создадим тег, который выводит список вариантов ответов для объекта модели Poll
, которая использовалась в учебнике. Мы будем использовать его следующим образом:
…результат будет выглядеть приблизительно следующим образом:
<ul> <li>First choice</li> <li>Second choice</li> <li>Third choice</li> </ul>
Первым делом, создадим функцию, которая принимает аргумент и возвращает словарь с данными. Заметим, что все что нам нужно, это вернуть словарь и ничего более сложного. Он будет использоваться как контекст для включаемого фрагмента шаблона. Например:
def show_results(poll): choices = poll.choice_set.all() return {'choices': choices}
Теперь создадим шаблон, который будет использоваться для генерации результата. Этот шаблон полностью относится к тегу: создатель тега определяет его, не создатель шаблонов(template designer). Для нашего примера шаблон будет очень простым:
<ul> {% for choice in choices %} <li> {{ choice }} </li> {% endfor %} </ul>
Теперь создадим и зарегистрируем тег, используя метод inclusion_tag()
объекта Library
. Для нашего примера, если шаблон тега называется results.html
, мы зарегистрируем тег следующим образом:
# Here, register is a django.template.Library instance, as before @register.inclusion_tag('results.html') def show_results(poll): . ..
Также можно зарегистрировать включающий тег используя экземпляр django.template.Template
:
from django.template.loader import get_template t = get_template('results.html') register.inclusion_tag(t)(show_results)
…при создании функции.
В некоторых случаях тег может требовать большого количества параметров. Может быть проблематично запомнить все параметры и их порядок. Чтобы решить эту проблему Django предоставляет параметр takes_context
для включающего тега. Если указать takes_context
при создании тега, тег не будет содержать обязательные аргументы, а функция Python будет принимать один аргумент – контекст текущего шаблона.
Например, предположим вы создаете тег, который будет использоваться в шаблонах с контекстом всегда содержащим переменные home_link
и home_title
. Вот как может выглядеть такой тег:
@register.inclusion_tag('link.html', takes_context=True) def jump_link(context): return { 'link': context['home_link'], 'title': context['home_title'], }
Заметим, что первый параметр должен называться context
.
При вызове register.inclusion_tag()
мы указали takes_context=True
и название включаемого шаблона. Вот как может выглядеть шаблон link.html
:
Jump directly to <a href="{{ link }}">{{ title }}</a>.
Для использования тега необходимо загрузить библиотеку тегов и вызвать тег без аргументов:
Заметим, что при использовании takes_context=True
необязательно передавать аргументы. Тег будет иметь доступ ко всему контексту шаблона.
Параметр takes_context
по умолчанию равен False
. Если он равен True
, в тег будет передан объект контекста.
inclusion_tag
может принимать любое количество позиционных и именованных аргументов. Например:
@register.inclusion_tag('my_template.html') def my_tag(a, b, *args, **kwargs): warning = kwargs['warning'] profile = kwargs['profile'] ... return ...
Теперь в тег можно передать любое количество позиционных аргументов, разделенных пробелами. Как и в Python, значения для именованных аргументов можно указать, используя знак “=
” после именованных аргументов. Например:
{% my_tag 123 "abcd" book.title warning=message|lower profile=user.profile %}
Краткий обзор
Система шаблонов работает в два этапа: компиляция и выполнение. Создавая собственный тег вы определяете как выполняется компиляция и выполнение тега.
Когда Django компилирует шаблон, содержимое шаблона разбивается на “узлы” (nodes). Каждый узел это экземпляр django.template.Node
с методом render()
. Откомпилированный шаблон это просто список объектов Node
. Когда вы вызываете метод render()
откомпилированного объекта шаблона, шаблон просто вызывает render()
для каждого объекта Node
в списке узлов с переданным контекстом. Результаты объединяются для получения окончательного результата.
Таким образом, создавая собственный тег, вы указываете как “сырой” тег шаблона конвертируется в объект Node
(функцию компиляции) и что делает метод render()
.
Создание функции компиляции
Для каждого тега, с которым сталкивается парсер шаблона, вызывается его функция Python с содержимым тега и объектом парсера. Эта функция должна вернуть экземпляр Node
.
Например, давайте создадим тег, {% current_time %}
, который отображает текущую дату и время, отформатированные в соответствии с переданным параметром с синтаксисом аналогичным strftime()
. Первым делом следует определиться с синтаксисом тега. В нашем случае тег будет использоваться следующим образом:
<p>The time is {% current_time "%Y-%m-%d %I:%M %p" %}.</p>
Парсер функции должен получить параметр и вернуть объект Node
:
from django import template def do_current_time(parser, token): try: # split_contents() knows not to split quoted strings. tag_name, format_string = token.split_contents() except ValueError: raise template.TemplateSyntaxError( "%r tag requires a single argument" % token. contents.split()[0] ) if not (format_string[0] == format_string[-1] and format_string[0] in ('"', "'")): raise template.TemplateSyntaxError( "%r tag's argument should be in quotes" % tag_name ) return CurrentTimeNode(format_string[1:-1])
Заметки:
parser
– парсер шаблона. Он нам не нужен в данном примере.token.contents
– содержимое тега. В нашем примере это'current_time "%Y-%m-%d %I:%M %p"'
.Метод
token.split_contents()
разбивает аргументы разделенные пробелами при это не разбивая строки выделенные кавычками. Более простой методtoken.contents.split()
может быть не таким полезным и надежным так как разбивает по всем пробелам, включая пробелы в кавычках. Лучше всегда использоватьtoken.split_contents()
.Эта функция может вызвать исключение
django.template.TemplateSyntaxError
в случае синтаксической ошибки при использовании вашего тега.Исключение
TemplateSyntaxError
использует переменнуюtag_name
. Не вписывайте название тега в сообщение ошибки, потому что это привязывает название тега к функции.token.contents.split()[0]
‘’всегда’’ содержит название тега – даже если тег не содержит аргументы.Функция возвращает экземпляр
CurrentTimeNode
передавая в конструктор необходимую информацию с тега. В нашем примере передается"%Y-%m-%d %I:%M %p"
. Кавычки удаляются с помощьюformat_string[1:-1]
.Парсер – очень низкоуровневый. Разработчики Django экспериментировали с созданием различных микро-фреймверков поверх системы парсинга, используя техники, такие как грамматика EBNF, но эти эксперименты делали систему шаблонов медленной. Парсер низкоуровневый, так как это делает его быстрым.
Реализация выполнения тега
Следующим этапом мы создаем подкласс Node
с методом render()
.
В продолжение нашего примера создадим класс CurrentTimeNode
:
import datetime from django import template class CurrentTimeNode(template.Node): def __init__(self, format_string): self.format_string = format_string def render(self, context): return datetime.datetime.now().strftime(self.format_string)
Заметки:
__init__()
принимает аргументformat_string
изdo_current_time()
. Всегда передавайте параметры вNode
через__init__()
.Метод
render()
выполняет основную работу.render()
не должен вызывать исключений, особенно на боевом сервере. Однако, в некоторых случаях, особенно приTEMPLATE_DEBUG
равномTrue
, метод может вызывать исключения для упрощения отладки. Например, некоторые встроенные теги вызываютdjango.template.TemplateSyntaxError
, если передать неверное количество или тип аргументов.
Разделение компиляции и выполнения эффективно так как позволяет выполнить шаблон с несколькими контекстами без надобности выполнять парсинг каждый раз.
Работа с автоматическим экранированием
Вывод тега не экранируется(за исключением simple_tag()
). Однако, есть несколько вещей которые следует помнить.
Если метод render()
добавляет переменную в контекст (вместо того, чтобы вернуть строку), он должен пометить ее как безопасную используя функцию mark_safe()
, если это необходимо. В конечном итоге к переменной будет применяться автоматическое экранирование при выводе в шаблоне, так что необходимо пометить ее как безопасную чтобы избежать повторного экранирования значения.
Если тег создает новый контекст, необходимо установить параметр автоматического экранирования со значением текущего контекста. Метод __init__
класса Context
принимает аргумент autoescape
, который вы можете использовать. Например:
from django.template import Context def render(self, context): # ... new_context = Context({'var': obj}, autoescape=context.autoescape) # ... Do something with new_context ...
Это не совсем обычная ситуация, но может быть полезно если вы самостоятельно выполняете шаблон. Например:
def render(self, context): t = context.template.engine.get_template('small_fragment.html') return t.render(Context({'var': obj}, autoescape=context.autoescape))
Если бы мы не передали значение context.autoescape
в новый Context
, результат всегда экранировался бы, что может быть неуместным при использовании тега в блоке {% autoescape off %}
.
Учитываем потокобезопасность
После парсинга тега и создания узла его метод render
может быть вызван любое количество раз. Так как Django может выполняться в мультипоточном окружении, один узел может выполняться с несколькими контекстами для различных запросов. По этом важно удостовериться что ваши шаблонные теги являются потокобезопасными.
Чтобы ваш шаблонный тег был потокобезопасный, вы не должны сохранять информацию о состоянии в узле. Например, Django предоставляет тег cycle
, который переключается между аргументами при каждом вызове:
{% for o in some_list %} <tr> ... </tr> {% endfor %}
Реализация CycleNode
могла бы выглядеть следующим образом:
import itertools from django import template class CycleNode(template.Node): def __init__(self, cyclevars): self.cycle_iter = itertools.cycle(cyclevars) def render(self, context): return next(self.cycle_iter)
Однако, предположим что одновременно выполняется два экземпляра шаблона представленного выше:
Поток 1 выполняет первую итерацию по циклу,
CycleNode.render()
возвращает ‘row1’Поток 2 выполняет первую итерацию по циклу,
CycleNode. render()
возвращает ‘row2’Поток 1 выполняет вторую итерацию по циклу,
CycleNode.render()
возвращает ‘row1’Поток 2 выполняет вторую итерацию по циклу,
CycleNode.render()
возвращает ‘row2’
CycleNode работает, но итерация происходит глобально. Так как Поток 1 и Поток 2 связаны, они используют одни значения. Это точно не то, что вам нужно!
Для решения этой проблемы Django предоставляет render_context
в контексте текущего шаблона. render_context
работает как и словарь в Python и должен использоваться для хранения состояния узлов между вызовами метода render
.
Давайте перепишем CycleNode
чтобы использовать render_context
:
class CycleNode(template.Node): def __init__(self, cyclevars): self.cyclevars = cyclevars def render(self, context): if self not in context.render_context: context.render_context[self] = itertools. cycle(self.cyclevars) cycle_iter = context.render_context[self] return next(cycle_iter)
Заметим, что вполне безопасно сохранять в атрибутах объекта Node
информацию, которая не изменяется. В случае CycleNode
, параметр cyclevars
не изменяется после создания экземпляра Node
, и нет необходимости хранить его в render_context
. Но информация, которая относится к конкретному шаблону, например текущая итерация узла CycleNode
, должна сохраняться в render_context
.
Примечание
Обратите внимание как мы используем self
для привязки состояния к текущему узлу в render_context
. В шаблоне может быть несколько CycleNode
, и важно не нарушить состояние других узлов. Самый просто способ это использовать self
в качестве ключа в render_context
. Если вам необходимо хранить несколько переменных, используйте в render_context[self]
словарь.
Регистрация тега
Теперь зарегистрируем тег в экземпляре Library
вашего модуля, как описано выше. Например:
register.tag('current_time', do_current_time)
Метод tag()
принимает два аргумента:
Название шаблонного тега – строкой. Если параметр не указан, используется название функции.
Функция компиляции – функция Python (не название функции строкой).
Как и для регистрации фильтра, можно использовать как декоратор:
@register.tag(name="current_time") def do_current_time(parser, token): ... @register.tag def shout(parser, token): ...
Если не указать параметр name
, как во втором примере, Django будет использовать название функции в качестве названия тега.
Передача переменных шаблона в тег
Хоть вы и можете передать любое количество аргументов в шаблонный тег используя token.split_contents()
, все аргументы передаются как строка. Чтобы передать значение переменной шаблона, необходимо немного усложнить код.
Тег из примера выше форматирует текущее время и возвращает строку. Предположим вы хотите передать объект DateTimeField
и отформатировать это значение:
<p>This post was last updated at {% format_time blog_entry.date_updated "%Y-%m-%d %I:%M %p" %}.</p>
token.split_contents()
вернет три значения:
Название тега
format_time
.Строку
'blog_entry.date_updated'
(без кавычек).Строку форматирования
'"%Y-%m-%d %I:%M %p"'
. Значение изsplit_contents()
будет содержать кавычки для таких переменных.
Теперь ваш тег будет выглядеть следующим образом:
from django import template def do_format_time(parser, token): try: # split_contents() knows not to split quoted strings. tag_name, date_to_be_formatted, format_string = token. split_contents() except ValueError: raise template.TemplateSyntaxError( "%r tag requires exactly two arguments" % token.contents.split()[0] ) if not (format_string[0] == format_string[-1] and format_string[0] in ('"', "'")): raise template.TemplateSyntaxError( "%r tag's argument should be in quotes" % tag_name ) return FormatTimeNode(date_to_be_formatted, format_string[1:-1])
Теперь вам следует изменить метод render
узла чтобы получить значение атрибута date_updated
объекта blog_entry
. Это может быть выполнено с использованием класса Variable()
из django.template
.
Чтобы использовать класс Variable
, создайте экземпляр указав название переменной, потом вызовите variable.resolve(context)
. Например:
class FormatTimeNode(template.Node): def __init__(self, date_to_be_formatted, format_string): self. date_to_be_formatted = template.Variable(date_to_be_formatted) self.format_string = format_string def render(self, context): try: actual_date = self.date_to_be_formatted.resolve(context) return actual_date.strftime(self.format_string) except template.VariableDoesNotExist: return ''
Будет вызвано исключение VariableDoesNotExist
если невозможно найти значение переменной в текущем контексте.
Добавление переменной в контекст
Предыдущие примеры тегов просто выводят значение. Более гибкий способ — это добавить значение в переменную контекста вместо вывода результата. Таким образом автор шаблона может использовать результат выполнения тега несколько раз.
Чтобы добавить переменную в контекст, просто добавьте значение в контекст как в словарь в методе render()
. Вот обновленная версия CurrentTimeNode
, которая устанавливает переменную current_time
вместо вывода результата:
import datetime from django import template class CurrentTimeNode2(template. Node): def __init__(self, format_string): self.format_string = format_string def render(self, context): context['current_time'] = datetime.datetime.now().strftime(self.format_string) return ''
Заметим, что render()
возвращает пустую строку. render()
всегда должен возвращать строку. Если все, что делает тег, это добавление переменной в контекст, метод render()
должен вернуть пустую строку.
Вот как вы можете использовать новую версию тега:
{% current_time "%Y-%M-%d %I:%M %p" %}<p>The time is {{ current_time }}.</p>
Область видимости переменной в контексте
Любая переменная, добавленная в контекст будет доступна только в блоке(block
) шаблона, в котором она была добавлена. Так сделано намерено, чтобы переменные не конфликтовали с контекстом другого блока.
Но есть одна проблема в CurrentTimeNode2
: название переменной current_time
“вшито” в тег. Это означает, что вы должны убедиться, что переменная {{ current_time }}
не используется в шаблоне, потому что {% current_time %}
перезапишет ее. Правильное решение – позволить указывать название переменной при вызове тега:
{% current_time "%Y-%M-%d %I:%M %p" as my_current_time %} <p>The current time is {{ my_current_time }}.</p>
Чтобы это сделать вам нужно изменить код функции компиляции и подкласса Node
:
import re class CurrentTimeNode3(template.Node): def __init__(self, format_string, var_name): self.format_string = format_string self.var_name = var_name def render(self, context): context[self.var_name] = datetime.datetime.now().strftime(self.format_string) return '' def do_current_time(parser, token): # This version uses a regular expression to parse tag contents. try: # Splitting by None == splitting by spaces. tag_name, arg = token.contents. split(None, 1) except ValueError: raise template.TemplateSyntaxError( "%r tag requires arguments" % token.contents.split()[0] ) m = re.search(r'(.*?) as (\w+)', arg) if not m: raise template.TemplateSyntaxError("%r tag had invalid arguments" % tag_name) format_string, var_name = m.groups() if not (format_string[0] == format_string[-1] and format_string[0] in ('"', "'")): raise template.TemplateSyntaxError( "%r tag's argument should be in quotes" % tag_name ) return CurrentTimeNode3(format_string[1:-1], var_name)
Разница в том, что do_current_time()
получает формат строки и название переменной и передает в конструктор CurrentTimeNode3
.
Если вам нужно только добавить переменную в контекст, воспользуйтесь присваивающий тег (assignment tag).
Создание блочного тега
Шаблонные теги могут работать вместе. Например, встроенный тег {% comment %}
скрывает содержимое до тега {% endcomment %}
. Чтобы создать подобный тег, используйте parser.parse()
в функции компиляции тега.
Вот простая реализация тега {% comment %}
:
def do_comment(parser, token): nodelist = parser.parse(('endcomment',)) parser.delete_first_token() return CommentNode() class CommentNode(template.Node): def render(self, context): return ''
Примечание
Реализация {% comment %}
немного отличается от нашего примера, позволяя использовать неправильные теги между {% comment %}
и {% endcomment %}
. Для этого используется parser.skip_past('endcomment')
вместо parser.parse(('endcomment',))
перед parser.delete_first_token()
, такой вариант не генерирует список узлов.
parser.parse()
принимает кортеж названий тегов для “парсинга, пока они не встретятся”. Функция вернет объект django.template.NodeList
, который является списком объектов Node
встреченных ‘’до’’ любого из тегов указанных в кортеже.
В "nodelist = parser.parse(('endcomment',))"
из нашего примера, nodelist
– это список всех узлов встреченных между {% comment %}
и {% endcomment %}
, не включая {% comment %}
и {% endcomment %}
.
После вызова parser.parse()
парсер не “обрабатывает” тег {% endcomment %}
, поэтому необходимо вызвать parser.delete_first_token()
.
CommentNode.render()
просто возвращает пустую строку. Все между {% comment %}
и {% endcomment %}
игнорируется.
Обработка блочного тега с сохранением содержимого
В примере выше, do_comment()
игнорирует содержимое между {% comment %}
и {% endcomment %}
. Вместо этого можно выполнить какие-либо операции над содержимым блочного тега.
Например, у нас есть тег {% upper %}
, который преобразует содержимое до тега {% endupper %}
в верхний регистр.
Пример использования:
{% upper %}This will appear in uppercase, {{ your_name }}.{% endupper %}
Как и в предыдущем примере мы будем использовать parser.parse()
. Но в этот раз полученный nodelist
передадим в Node
:
def do_upper(parser, token): nodelist = parser.parse(('endupper',)) parser.delete_first_token() return UpperNode(nodelist) class UpperNode(template.Node): def __init__(self, nodelist): self.nodelist = nodelist def render(self, context): output = self.nodelist.render(context) return output.upper()
Новым здесь является вызов self.nodelist.render(context)
в UpperNode.render()
.
Более сложные примеры ищите в исходном коде реализации {% for %}
в django/template/defaulttags.py
и {% if %}
в django/template/smartif.py
.
Узнайте, как добавить пиксель Facebook в Google Менеджер тегов.
Использование пикселя Facebook с Google Менеджером тегов
Если вы управляете тегами на сайте с помощью Google Менеджера тегов, то можете добавить пиксель Facebook в свой аккаунт Google Менеджера тегов. Это позволит вам измерять и оптимизировать результаты рекламы на Facebook. Подробнее о преимуществах пикселя Facebook.
Установка пикселя
- Войдите в свой аккаунт Google Менеджера тегов.
- Выберите контейнер своего сайта и нажмите Добавить новый тег.
- Нажмите Пользовательский тег HTML и введите название тега.
- Откройте Events Manager и выберите Добавить событие.
- Нажмите Установить код вручную.
- Выберите Копировать код, чтобы скопировать весь базовый код пикселя.
- Вернитесь в Google Менеджер тегов и вставьте код в HTML-контейнер.
- Нажмите на раскрывающееся меню Расширенные настройки и выберите Один раз на страницу в разделе Настройки активации тега.
- В разделе Условия активации выберите Все страницы.
- Нажмите Создать тег.
Создание тегов для определенных действий
Вставив базовый код, вы можете создать отдельные теги для различных типов страниц и событий на своем сайте (например, страницы товара, кнопки «Добавить в корзину» или страницы покупки).
- В Google Менеджере тегов выберите контейнер своего сайта и нажмите Добавить новый тег.
- Введите название тега и вставьте фрагмент кода, связанный с событием, а также другие переменные, которые вы хотите отслеживать. Ваши переменные (например, «product_ids» (ID товаров) и «product_name» (название товара)) могут отличаться от указанных в примере ниже.
- Нажмите Пользовательский тег HTML и введите название тега.
- Скопируйте и вставьте фрагмент кода, связанный с событием, а также другие переменные, которые вы хотите отслеживать. Ваши переменные (например, «product_ids» (ID товаров) и «product_name» (название товара)) могут отличаться от указанных в примере ниже.
- Нажмите на раскрывающееся меню Расширенные настройки и выберите Один раз на событие в разделе Настройки активации тега.
- В разделе Порядок активации тегов установите флажок рядом с пунктом, который позволит активировать тег после базового кода. После этого выберите тег базового кода.
- В разделе Условия активации выберите триггер, который подходит для вашего сайта.
- Нажмите Создать тег.
- Таким же образом создайте теги для других событий на своем сайте (например, для добавления в корзину или покупки). Ознакомьтесь с примерами ниже.
- Закончив создавать теги, нажмите Опубликовать.
Проверка работы пикселя
Загрузив все события, убедитесь, что пиксель на вашем сайте работает правильно. Для этого:
- Перейдите на веб-страницу с пикселем. Если он работает, на странице с информацией о пикселе в Events Manager вы увидите статус Активный, а на панелях будут показаны сведения о действиях. Подробнее о данных пикселя в Events Manager.
- Если статус пикселя — Действий пока нет, воспользуйтесь инструментом Помощник по пикселям Facebook, чтобы найти и устранить проблему. Когда этот инструмент будет установлен в браузере Chrome, рядом с адресной строкой появится маленький значок. Перейдите на свой сайт в браузере Chrome и нажмите значок Помощника по пикселям. Вы увидите, какие события пикселя были найдены на странице и успешно ли они загрузились. Если на странице обнаружены проблемы, будут показаны советы по их устранению. Подробнее.
Теги Zoo — создание и удаление, настройки тегов в компоненте
Теги Zoo — это ключевые слова, описывающие материал. Их чаще всего выводят в облаке тегов — это такой блок сайта, в котором они показываются в виде ссылок.
Пример тегов Zoo. Вы создаете страницу про раскраску хомячков, и в тегах указываете ключевое слово «хомячки». Далее вы например пишите статью о правильном питании хомячков и тоже указываете для статьи тег «хомячки». В итоге, если пользователь заходит на сайт и видит ссылку в облаке тегов «хомячки», он может выбрать все статьи, которые имеют отношение к хомячкам. Это бывает очень удобно. Таким образом, теги это в некотором роде объединяющий смысл между разными материалами.
Создание тегов в Zoo
Кликните на ваш каталог в Zoo и затем выберите вкладку Элементы (Items). Вы увидите материалы в вашем каталоге.
Откройте материал, кликнув на его имя. Далее разверните справа вкладку Теги и вы увидите форму для управления тегами. Вы легко найдете поле ввода для нового тега и список тегов для той страницы, которую вы сейчас редактируете. Справа от каждого тега внутри кнопок находится крестик, нажав на который, можно удалить ненужный тег для данного материала. Ниже имеется список наиболее часто используемых тегов.
Чтобы добавить новый тег, нужно ввести в поле для ввода ключевое слово, а затем нажать клавишу <Enter> или кнопку Добавить метку (Add tag) справа.
После того, как вы начнете вводить первые буквы, появится выпадающий список с уже имеющимися тегами. Вы можете добавить теги, воспользовавшись клавиатурными стрелками и клавишей <Enter>, или выбрав тег курсором мыши.
После утверждения ключевого слова, оно появится в списке назначенных для материала тегов.
Управление тегами
На странице компонента Zoo выберите нужный каталог, а затем Теги (Tags) во второй вкладке. Вы увидите все теги, которые используются в выбранном каталоге, а также количество страниц на которох они используются. Вы можете удалить тег, пометив его галочкой и нажав иконку Удалить (Delete) в правом верхнем углу.
Внимание: удалить какой-либо тег в Zoo вы можете только если он нигде не используется. Чтобы узнать на каких страницах применяется тег и удалить его, вам необходимо кликнуть по цифре количества элементов.
Чтобы переименовать тег, необходимо кликнуть по его названию, в появившемся поле ввода ввести новые ключевые слова и нажать на кнопку Сохранить (Save).
Создавать теги на сообщения RAILS
Я делаю что-то вроде этого поля тегов автозаполнения для сообщений на stackoverflow. com
Я хочу сделать так, чтобы, когда вы делаете запись в блоге, вы могли пометить ее словами в базе данных, аналогично SO.
Для постов он принадлежит тегам_to_and_has_many Для тегов он принадлежит постам_to_and_has_many
Однако для меня это проблема сделать это на той же странице, потому что @post будет равно нулю.
Как я могу это реализовать?
(Если кто-то может дать мне код для страницы StackOverflow ask question, это будет AWESOME)
ruby-on-rails-3Поделиться Источник SuperString 16 января 2011 в 12:07
4 ответа
- Генерация файла тегов emacs для проекта Ruby on Rails
Я создаю файл тегов для emacs для моего проекта Ruby on Rails со следующей командой: ctags -f TAGS —extra=-f —languages=-javascript —exclude=.git —exclude=log -e -R . $(rvm gemdir)/gems/ Когда я пытаюсь найти теги (используя M -. ), некоторые теги работают нормально, но с большим количеством…
- Stack Overflow-подобный селектор тегов для Rails
Я хочу использовать теги для модели в моем приложении Rails, и я хотел бы иметь тот же механизм выбора тегов, что и Stack Overflow при задании вопроса. I.e. Я набираю ‘rails’, и он опускает список тегов, которые включают ‘rails’, и я могу продолжать добавлять новые теги оттуда. Есть ли плагин,…
1
Я думаю, что проблема здесь в том, что мне кажется, что вы задаете два разных вопроса. Пожалуйста, поправьте меня,если я ошибаюсь.
Первый вопрос заключается в том, как бы вы реализовали функцию автозаполнения, чтобы пользователи могли легко выбирать из предварительно заполненного списка тегов. Чтобы ответить на этот вопрос, вы можете обратиться к ответу spncrgr выше.
Второй вопрос заключается в том, как справиться с привязкой этих извлеченных тегов к текущему сообщению. Для этого вы можете добавить дополнительную функциональность javascript в свое решение автозаполнения. Когда пользователь выбирает нужный тег из поля автозаполнения, вы можете сделать то же самое, что и StackOverflow, и добавить тег в список тегов в одном текстовом поле. Они могут быть разделены пробелом или запятой. Когда вы отправляете форму для создания новой записи, вы можете разобрать это поле на отдельные теги:
tags = params[:tags].split(' ')
Затем вы можете связать эти теги с моделью в действии Post#create.
Поделиться Wade Tandy 26 января 2011 в 19:10
0
Мне кажется, что вы хотите автоматически генерировать теги.
Вы могли бы создать
класс Post
before_save :create_tagsчастная
деф create_tags
# как-нибудь получите свои теги
self.tags << Tag. new(:text=>»…»)
конец
конец
метод в models/post.rb и построить их там.
Поделиться m4risU 22 января 2011 в 01:00
0
Это может вам совсем не помочь (или вы, возможно, уже видели это), но вот ссылка на эпизод Railscasts ‘ на автозаполнение:
http://railscasts.com/episodes/102-auto-complete-association
Я знаю, что это помогло мне, когда я пытался сделать что-то подобное.
HTH
Поделиться Spencer R 21 января 2011 в 22:04
- Как построить иерархию тегов на rails с помощью acts-as-taggable-on
У меня есть приложение rails, которое включает в себя теги для записей в блоге с помощью gem acts-as-taggable-on. Моя идея состоит в том, чтобы расширить механизм тегирования этого gem, используя подход умеренных ссылок, где я могу создать несколько пользователей в качестве владельцев тегов, и они. ..
- Ruby на Rails тегах против HTML тегов
У меня есть вопрос о тегах в файлах .html.erb. Какая практика лучше: Ruby на Rails тегах или HTML тегах? Лучше ли использовать Ruby на тегах Rails как можно больше? Или, может быть, мне следует избегать их и выбрать вместо них HTML? Как решить?
0
Если вы хотите найти среди существующих тегов свое автоматическое предложение, вы должны иметь его совпадение с Tag.all, так как это не будет равно нулю, точно так же, как вы собирали бы группу объектов в раскрывающемся списке select. Не уверен насчет кода для автозаполнения, но теги должны быть в таблице тегов.
Поделиться Josh Kovach 25 января 2011 в 17:26
Похожие вопросы:
Разбор тегов сообщений блога из текстового поля
Во-первых, позвольте мне начать с того, что я знаю, что этот точный вопрос был задан здесь раньше. Но на него не ответили, и я не хочу поднимать тему зомби более чем годичной давности. Во-вторых, я…
Генерация тегов изображений в Rails
Если вы работаете в Rails, как лучше всего определить вспомогательную функцию, которая генерирует множество тегов изображений? Затем эта функция вызывается из файла .erb, создавая представление….
Отображение сообщений для задачи с переданным параметром — Ruby на Rails
Я построил приложение для блога, используя Ruby на Rails. В приложении у меня есть посты и теги. Post has_many :tags и Tag belongs_to :post. В представлении /views/posts/index.html я хочу отобразить…
Генерация файла тегов emacs для проекта Ruby on Rails
Я создаю файл тегов для emacs для моего проекта Ruby on Rails со следующей командой: ctags -f TAGS —extra=-f —languages=-javascript —exclude=.git —exclude=log -e -R . $(rvm gemdir)/gems/ Когда я…
Stack Overflow-подобный селектор тегов для Rails
Я хочу использовать теги для модели в моем приложении Rails, и я хотел бы иметь тот же механизм выбора тегов, что и Stack Overflow при задании вопроса. I.e. Я набираю ‘rails’, и он опускает список…
Как построить иерархию тегов на rails с помощью acts-as-taggable-on
У меня есть приложение rails, которое включает в себя теги для записей в блоге с помощью gem acts-as-taggable-on. Моя идея состоит в том, чтобы расширить механизм тегирования этого gem, используя…
Ruby на Rails тегах против HTML тегов
У меня есть вопрос о тегах в файлах .html.erb. Какая практика лучше: Ruby на Rails тегах или HTML тегах? Лучше ли использовать Ruby на тегах Rails как можно больше? Или, может быть, мне следует…
Получить количество тегов по контексту с помощью acts_as_taggable_on в Rails
В моем приложении Rails я использую acts_as_taggable_on , и у меня есть фиксированный выбор тегов, которые могут быть применены как к Users , так и к Posts (соответствующие контексты- :user_tags и…
Использование git filter-branch для изменения сообщений тегов
Как я могу использовать git filter-branch для изменения сообщений тегов? Использование параметра —msg-filter , по-видимому, изменяет только обычные сообщения фиксации(коммита), но не сообщения. ..
Django порядок тегов сообщений
Интересно, можно ли изменить порядок тегов сообщений сообщения django с помощью дополнительных тегов. from django.contrib import messages messages.success(request, ‘success message’,…
Что такое теги? | Глоссарий по контент-маркетингу
Теги: краткое описание
Теги — это маркеры, используемые для маркировки содержимого Интернета с дополнительной информацией. Они используются по-разному, в зависимости от контекста и конкретного канала. Например, все сообщения в блогах или сообщения, включая фотографии в социальных сетях, таких как Facebook и Twitter, могут быть помечены.
Что такое теги? Подробное описание:
Процесс маркировки включает использование меток для предоставления контенту дополнительной информации (с использованием определенного набора ключевых слов).Тегирование в основном используется для упрощения поиска информации или ссылки на нее, и есть разница между тегами блога и тегами социальных сетей.
Некоторые сайты также включают облака тегов. Здесь ключевые слова отображаются в большем или меньшем размере в зависимости от их частоты и популярности. Таким образом, облако тегов сайта может указывать, например, какие темы и термины будут встречаться чаще всего.
Теги блога
Сообщение в блоге часто будет включать релевантные ключевые слова, и при нажатии на тег будет отображаться весь контент, сгруппированный по этой конкретной теме и связанный с ней.Сообщения, связанные с определенным ключевым словом, появятся в списке, и если на веб-сайте есть RSS-канал, пользователи могут подписаться на оповещения по ключевым словам, которые будут уведомлять их о новых сообщениях, связанных с их указанными ключевыми словами.
При добавлении тегов в блог автор добавляет соответствующие теги к контенту при его загрузке в систему управления контентом. Поскольку все статьи в системе будут использовать теги, любой, кто использует нескольких авторов для написания статей в блоге, должен организовать и согласовать единый протокол правописания для всех тегов, если CMS не указывает свой собственный фиксированный набор тегов на выбор.
Социальные теги
Теги также используются в каналах социальных сетей, таких как Facebook и Twitter. Например, в Facebook можно выделить других пользователей Facebook в сообщениях или фотографиях. При добавлении тега к другому пользователю Facebook создается ссылка, и по этой ссылке публикация или изображение могут быть добавлены на временную шкалу другого пользователя Facebook.
Теги в Twitter
Как и в случае с Facebook, также можно отмечать других пользователей в службе микроблогов Twitter. Это выделяется в твитах, помещая символ @ перед именем пользователя, и Twitter теперь также позволяет вам отмечать других людей на фотографиях.
Кроме того, Twitter также известен своим хэштегом. Хотя многие другие каналы социальных сетей, такие как Facebook, Pinterest, Instagram, LinkedIn и Google+, теперь также позволяют использовать хэштеги, они возникли в Twitter.
Хэштег в Twitter — это хэш, помещаемый перед определенным ключевым словом, которое может включать как алфавитные, так и числовые формы. Хештеги могут быть размещены в твите или в конце твита и используются для агрегирования информации по теме. Чтобы помочь пользователям следить за последними тенденциями и темами, связанные твиты собираются вместе под одним хэштегом.Когда новый хэштег подбирается другими пользователями Twitter, он вскоре может вирусным образом распространиться по Интернету.
Заключение
Теги — это метод маркировки контента с помощью так называемых тегов. Это позволяет связать контент с дополнительной информацией. Теги имеют множество приложений, в том числе в блогах и в социальных сетях. Система тегов позволяет перечислять и собирать информацию по определенным ключевым словам, что упрощает поиск в Интернете.
С помощью социальных тегов пользователи социальных сетей могут отмечать текстовые сообщения или фотографии.Социальные сети также установили соглашение об использовании хэштегов. Они используются в Twitter, а также в Instagram, Pinterest, LinkedIn, Facebook и Google+ в качестве средства агрегирования контента по теме.
Термин «тег» также используется в связи с языками программирования, такими как HMTL, и описывает команду, используемую для форматирования и отображения текстовых элементов.
Пометка синонимов, пометка антонимов | Тезаурус Merriam-Webster
Тезаурус
Синонимы тега
(запись 1 из 3)
акт преследования или следования за другим- после того, как в течение недели пометил подозреваемого, детектив получил все необходимые доказательства того, что имела место контрабанда:
- погоня,
- погоня,
- преследование,
- преследование,
- преследование,
- преследование,
- преследование,
- затенение,
- следование,
- отслеживание,
- отслеживание,
- завершение
Синонимы и антонимы слова с тегами (Запись 2 из 3)
1 прикрепить к- пометил все платья наклейками с распродажей перед тем, как положить их на вешалку
- эксперты по дикой природе тайно пометили лесного волка, тщательно соблюдая безопасную дистанцию, чтобы волк не уловил их запах и не убежал.
- охота за птицами,
- охота,
- бег,
- охота,
- следование,
- преследование,
- преследование,
- бег,
- затенение,
- отслеживание,
- отслеживание,
- отслеживание,
- следование
Фразы, синонимы с тегами
Ближайшие антонимы для маркировки
присутствует причастие тегаСинонимы и антонимы слова с тегами (Запись 3 из 3)
1 нанести удар (кому-то или чему-то), как правило, очень энергично- он пометил меня правым крючком и почернел мне глаз
- удар,
- удар,
- ватин,
- ремень,
- бифинг,
- дубинка,
- боб,
- бить,
- удар,
- бокс,
- перебор,
- хлопанье,
- вырезание,
- удар,
- тактирование,
- удар,
- растрескивание,
- удар молотком,
- удар,
- стук,
- забивание гвоздями ,
- приклеивание,
- удары,
- удары,
- постукивание,
- хлопанье,
- удары,
- удары,
- удары,
- удары,
- удары,
- носки,
- удары,
- удар,
- удар,
- удар,
- удар,
- удар, 900 54
- удар,
- китобойный промысел,
- удар
- избиение,
- избиение,
- удар,
- удар,
- измельчение,
- наручники,
- протирание,
- шнуровка,
- удар,
- облизывание,
- травление,
- травление,
- забрасывание,
- причесывание,
- нанесение удара
- (или нанесение удара),
- ударное воздействие
- (также нанесение удара),
- черновая обработка
- ударное воздействие, удары,
- удары,
- толчки,
- удары ногами,
- колен,
- толчки,
- толчки,
- толчки,
- толчки,
- штамповки
- удары палками,
- дубинки,
- дубинки
- (или дубинка),
- молот,
- порка,
- увязка,
- рубка,
- рубка,
- кувалда,
- нарты,
- копье,
- колоть,
- переключение,
- избиение,
- хлестание
Фразы, синонимы тега
2 принять решение принять (кого-то или что-то) из группы возможностей- она пометила своего самого опытного оперативника для специальной миссии
- выбор вишни,
- выбор,
- выбраковку,
- выбор,
- ручной подбор,
- именование,
- выбор (за),
- выбор,
- предпочтение,
- выбор,
- выделение (выход),
- взятие
Ближайшие антонимы для маркировки
См. Определение словаряОпределение тега Merriam-Webster
\ ˈtag \ 1 : незакрепленный кусок ткани : лохмотья2 : металлический или пластиковый переплет на конце шнурка
3 : кусок подвешиваемого или прикрепленного материала, в частности : петля, узел или кисточка на одежде
4a : краткая цитата, используемая для риторического акцента или сентенционального эффекта
b : повторяющееся или характерное словесное выражение
5a : картонный, пластиковый или металлический маркер, используемый для идентификации или классификации теги лицензии
b : описательный или идентифицирующий эпитет
c : что-то, что используется для идентификации или местоположения : флагf : элемент кода в компьютерном документе, который используется специально для управления форматом и компоновкой или для установить гиперссылку.
g : hashtag… монахини поделились своей повседневной жизнью в Instagram, Snapchat и Twitter с тегом #MediaNuns… — Elizabeth Bruenig h : — строка текста (например, символ @, за которым следует имя пользователя) который используется для отметки человека или учетной записи в сообщении в социальных сетях Хотя невозможно запретить другу отмечать вас, Facebook позволяет вам просматривать все теги до того, как они появятся в вашем профиле.- Lara Webster 6 : отдельный фрагмент : бит7 : граффито в форме идентифицирующего имени или символа
переходный глагол
1 : предоставить или пометить с помощью или как если бы тег: например,
a : для указания маркера или цены был с тегом по цене 4,95 долл. США
b : для обозначения имени или эпитета ярлык : , марка с тегом его бывшийc : для проставления билета (автомобиль) для движения Нарушение
d : для дефейса с помощью граффито, обычно в виде псевдонима дефейсера
e : , чтобы снабдить (что-то, например, сообщение в социальной сети) хэштегом Не забудьте отправить свои фотографии Монреаля через Facebook, Twitter и Instagram, отметив их тегом #ThisMtl. — Montreal Gazettef : для упоминания (другого человека или учетной записи) в сообщении в социальной сети таким образом, чтобы это лицо или учетная запись были уведомлены о публикации На Facebook, если кто-то хочет привлечь ваше внимание или дать понять другим, что вы каким-то образом связаны с сообщением, они могут отметить вас в нем. Ваше имя будет упомянуто в сообщении или с фото, и все, кто его увидит, также будут знать, что вы упомянуты.- Дэйв Джонсон Знать, как отметить кого-то в Facebook, означает также знать, как отмечать кого-то в Twitter и Instagram. Просто используйте символ @, чтобы начать тег. — ThriveHive.com Мои друзья вернулись и отметили меня на всех фотографиях, которые я пропустил… — Рэйчел Краус Instagram позволяет пользователям публиковать у себя сообщения, в которых они были отмечены, в их собственной истории. — Девон Дельфино
2 : приложить как дополнение : добавить3 : внимательно и настойчиво следить
4 : привлечь к ответственности особенно : обвинить в нарушении закона был помечен как за… нападение — Берт Вулис
1 : игра, в которой игрок преследует других и пытается прикоснуться к одному из них, который затем становится им
2 : действием или экземпляром тега бегуна в бейсболе
переходный глагол
1a : касаться или как будто в игре с тегом
b : сбивать (бегущего) в бейсболе касанием мяча или рукой в перчатке, содержащей мяч
3 : to choo обычно для специальных целей : выберите4 : , чтобы нанести удар или убежать (питчер) в бейсболе тесто пометил его для домашнего пробега
определение тегов по The Free Dictionary
тег
1 (tăg) n.1. Полоска кожи, бумаги, металла или пластика, прикрепленная к чему-либо или свисающая с шеи пользователя для идентификации, классификации или маркировки: бирки продажи на всех пальто и платьях.
2. Пластиковый или металлический наконечник на конце шнурка.
3. Контрастно окрашенный кончик хвоста животного.
4.а. Грязная спутанная прядь шерсти.
б. Распущенная прядь волос.
5. Тряпка; лохмотья.
6. Небольшой разрозненный фрагмент: я слышал только теги и отрывки из сказанного.
7. Орнаментальный штрих, особенно в конце подписи.
8. Обозначение или эпитет, особенно нежелательный: Он не любил ярлык нищего.
9.а. Краткая цитата, используемая в дискурсе, чтобы придать ему вид эрудиции или авторитета: шекспировские метки.
б. Клише, пила или аналогичная короткая условная идея, используемая для украшения дискурса: Эти ярлыки остроумия и мудрости утомляли меня.
с. Припев или последние строки песни или стихотворения.
г. Заключительные строки выступления в пьесе; реплика.
10. Компьютерыa. Метка, назначенная для идентификации данных в памяти.
б. Последовательность символов на языке разметки, используемая для предоставления информации о документе, например спецификаций форматирования.
с. Метатег.
11. Slang Граффити с текстом, особенно с именем автора, а не с изображением: «Вместо курсивного линейного тега Super Kool нарисовал свое имя на экстерьере вагона метро огромным розовым цветом. и желтые буквы »(Эрик Шильяно).
v. tagged , tag · ging , tag
v. tr.1. Чтобы пометить, идентифицировать или распознать с помощью бирки или другого идентификатора: я пометил его как неудачника.
2. Чтобы поставить талон (автомобиль) за нарушение правил дорожного движения или парковки.
3. Добавить в качестве дополнения к: пометил дополнительный абзац в письме.
4. Внимательно проследить: взволнованные дети отметили парад цирка в конце его маршрута.
5. Чтобы вырезать бирки из (овцы).
6. Чтобы добавить метку к: взрывчатым веществам, которые были помечены закодированными микроскопическими кусочками пластика.
7. Сленг Чтобы пометить или осквернить (поверхность) тегом граффити: пометьте стены метро.
v. внутр.Следить после; сопровождать: везде помечены после меня; настоял на том, чтобы пойти с ним.
[Среднеанглийский, свисающий кусок ткани на одежде , , возможно, скандинавского происхождения ; аналог шведского tagg, колючка, шип .]
tag’ger n.
тег
2 (тег) н.1. Игры Детская игра, в которой один игрок преследует других, пока он или она не сможет коснуться одного из них, который, в свою очередь, становится преследователем.
2. Бейсбол Акт маркировки бегуна.
3. Спорт Акт маркировки игрока с мячом в касании.
тр.в. теги , теги ging , теги1. Коснуться (другого игрока) в игре с тегом.
2. Бейсбол Коснуться (бегущего по бейсболу) мячом, чтобы нанести поражение.
3. Спорт Коснуться (игрока с мячом), чтобы завершить игру в касание.
Фразовый глагол: tag up BaseballДля возврата и касания одной ногой базы перед бегом на следующую базу после того, как полевой игрок поймал мяч.
[Возможно вариант шотландского tig, touch, tap , вероятно, изменение среднеанглийского tek.]
TAG
abbr.Генеральный адъютант
Словарь английского языка American Heritage®, пятое издание. Авторские права © 2016 Издательская компания Houghton Mifflin Harcourt. Опубликовано Houghton Mifflin Harcourt Publishing Company. Все права защищены.
тегирование
(ˈtæɡɪŋ) nсредство отслеживания местонахождения (преступника, животного и т. Д.)) с помощью электронного тега
Словарь английского языка Коллинза — полное и несокращенное, 12-е издание, 2014 г. © HarperCollins Publishers 1991, 1994, 1998, 2000, 2003, 2006, 2007, 2009, 2011, 2014
Добавление тегов к ресурсам AWS — AWS General Номер ссылки
Вы можете назначить метаданные своим ресурсам AWS в виде тегов . Каждый тег — это метка, состоящая из определяемого пользователем ключа и значения.Теги может помочь вам управлять, идентифицировать, организовывать, искать и фильтровать ресурсы. Вы можете Создайте теги для классификации ресурсов по назначению, владельцу, среде или другим критериям.
Не добавляйте личную информацию (PII) или другую конфиденциальную или конфиденциальная информация в тегах. Теги доступны для многих сервисов AWS, включая биллинг. Теги не предназначены для использования для личных или конфиденциальных данных.
В этом разделе описаны часто используемые категории тегов и стратегии, которые помогут вам реализовать последовательная и эффективная стратегия маркировки. Следующие разделы предполагают базовые знания ресурсов AWS, тегов, подробного выставления счетов и AWS Identity and Access Management (Я).
Каждый тег состоит из двух частей:
Ключ тега (например,
CostCenter
,Среда
, илиПроект
). Ключи тегов — регистр чувствительный.Значение тега (например,
111122223333
илиПроизводство
). Как и ключи тегов, значения тегов чувствительны к регистру.
Вы можете использовать теги для категоризации ресурсов по назначению, владельцу, среде или другим параметрам. критерии. Для получения дополнительной информации см. AWS Tagging. Стратегии.
Вы можете добавлять, изменять или удалять теги по одному ресурсу за раз из службы каждого ресурса. консоль, сервисный API или AWS CLI.
Лучшие практики
При создании стратегии тегов для ресурсов AWS следуйте рекомендациям:
Не храните личную информацию (PII) или другую конфиденциальную или конфиденциальная информация в тегах.
Используйте стандартный формат тегов с учетом регистра и применяйте его последовательно для всех типов ресурсов.
Учитывайте рекомендации по тегам, которые поддерживают несколько целей, например, управление ресурсами. контроль доступа, отслеживание затрат, автоматизация и организация.
Используйте автоматизированные инструменты для управления тегами ресурсов. AWS Resource Groups и Resource Groups Tagging API позволяют программно управлять тегами, упрощая автоматическое управление, поиск и фильтрацию тегов и Ресурсы.
Используйте слишком много тегов, а не слишком мало.
Помните, что теги легко изменить в соответствии с изменяющимся бизнесом. требований, но учитывайте последствия будущих изменений.Например, изменение тегов контроля доступа означает, что вы также должны обновить политики, которые ссылаться на эти теги и контролировать доступ к своим ресурсам.
Категории тегов
Компании, которые наиболее эффективно используют теги, обычно создают бизнес-группы тегов для организации своих ресурсов по техническим, бизнес, и параметры безопасности. Компании, использующие автоматизированные процессы для управления своими Инфраструктура также включает дополнительные теги для автоматизации.
Технические теги | Теги для автоматизации | Бизнес-теги | Теги безопасности |
---|---|---|---|
|
|
|
Ограничения и требования к именованию тегов
К тегам применяются следующие основные требования к именованию и использованию:
Каждый ресурс может иметь не более 50 тегов, созданных пользователем.
Системные теги, начинающиеся с
aws:
зарезервированы для AWS и не учитываются в этом ограничении. Вы не можете редактировать или удалять тег, который начинается с префиксаaws:
.Для каждого ресурса каждый ключ тега должен быть уникальным, и каждый ключ тега может иметь только одно значение.
Ключ тега должен содержать минимум 1 и максимум 128 символов Unicode в UTF-8.
Значение тега должно быть минимум 0 и максимум 256 символов Unicode. в UTF-8.
Некоторые службы не разрешают теги с пустым значением (длина 0).
Допустимые символы могут отличаться в зависимости от сервиса AWS.Для получения информации о том, что символы, которые можно использовать для тегов ресурсов в конкретном сервисе AWS, см. его документация. Как правило, разрешенные символы в тегах — это буквы, цифры, пробелы, представленные в UTF-8, и следующие символы: _. : / = + — @ .
В ключах и значениях тегов учитывается регистр. Лучше всего выбрать стратегии использования тегов и последовательно внедрять эту стратегию во всех все типы ресурсов. Например, решите, использовать ли
МВЗ
,CostCenter
илиCostCenter
и используйте то же соглашение для всех тегов. Избегайте использования похожих тегов с противоречивым регистром лечение.
Общие стратегии тегов
В этом разделе описываются общие стратегии тегов, которые помогают идентифицировать AWS и управлять им. Ресурсы.
Теги для ресурсной организации
Теги— хороший способ организовать ресурсы AWS в Консоли управления AWS. Вы можете настраивать теги для отображения вместе с ресурсами, а также выполнять поиск и фильтрацию по тегам. С помощью сервиса AWS Resource Groups вы можете создавать группы ресурсов AWS на основе на одном или дополнительные теги или части тегов.Вы также можете создавать группы на основе их появления в стеке AWS CloudFormation. Используя группы ресурсов и редактор тегов, вы можете объединить и просматривать данные для приложений, которые состоят из нескольких служб, ресурсов и регионов в одном место.
Теги для распределения затрат
AWS Cost Explorer и подробные отчеты по выставлению счетов позволяют разбить расходы на AWS по тег.Обычно вы используете бизнес-теги, например cost центр / бизнес-единица , клиент , или проект , чтобы связать затраты на AWS с традиционные измерения распределения затрат. Но отчет о распределении затрат может включать любые тег. Это позволяет связать затраты с техническими параметрами или параметрами безопасности, такими как конкретные приложения, среды или программы соответствия. Ниже приводится пример отчета о частичном распределении затрат.
Для некоторых сервисов можно использовать созданный AWS тег createdBy
для
цели распределения затрат, чтобы помочь учесть ресурсы, которые в противном случае могли бы пойти
без категории.Тег createdBy
доступен только для поддерживаемых AWS.
услуги и ресурсы. Его значение содержит данные, связанные с конкретным API или
консольные события. Дополнительные сведения см. В разделе Теги распределения затрат, созданные AWS, в AWS Billing and Cost Management User.
Направляющая .
Теги для автоматизации
Теги ресурса или службы часто используются для фильтрации ресурсов во время
автоматизация деятельности. Теги автоматизации используются для включения или отключения автоматизированных
задач или для определения конкретных версий ресурсов для архивации, обновления или удаления.
Например, вы можете запустить автоматические сценарии start
или stop
которые отключают среды разработки в нерабочее время для снижения затрат. В
В этом сценарии теги инстансов Amazon Elastic Compute Cloud (Amazon EC2) представляют собой простой
способ идентифицировать
экземпляров, чтобы отказаться от этого действия.Для скриптов, которые находят и удаляют устаревшие,
устаревшие или скользящие снимки состояния Amazon EBS, теги снимков могут добавлять дополнительное измерение
из
критерий поиска.
Метки для контроля доступа
ПолитикиIAM поддерживают условия на основе тегов, что позволяет ограничивать IAM разрешения на основе определенных тегов или значений тегов.Например, пользователь или роль IAM разрешения могут включать условия для ограничения вызовов API EC2 в определенных средах. (например, разработка, тестирование или производство) на основе их тегов. Та же стратегия может использоваться для ограничения вызовов API к конкретному виртуальному частному облаку Amazon (Amazon VPC) сети. Поддержка для Разрешения IAM на основе тегов на уровне ресурсов зависят от службы. Когда вы используете условия на основе тегов для управления доступом, обязательно определите и ограничьте, кто может изменить теги. Для получения дополнительной информации об использовании тегов для управления доступом API к Ресурсы AWS см. В разделе Сервисы AWS, которые работают с IAM в Руководство пользователя IAM .
Управление тегами
Эффективная стратегия тегов использует стандартизованные теги и применяет их последовательно и программно через ресурсы AWS.Вы можете использовать как реактивный, так и проактивный подходы к управлению тегами в среде AWS.
Реактивное управление для поиска ресурсов которые не помечены должным образом с помощью таких инструментов, как тегирование групп ресурсов API, правила AWS Config и пользовательские скрипты.Чтобы найти ресурсы вручную, вы можете использовать Тег Редактор и подробные отчеты по биллингу.
Проактивное управление использует такие инструменты, как AWS CloudFormation, AWS Service Catalog, политики тегов в AWS Organizations или IAM разрешения на уровне ресурсов для обеспечить единообразное применение стандартизованных тегов при создании ресурса.
Например, вы можете использовать свойство AWS CloudFormation
Resource Tags
, чтобы применять теги к типам ресурсов. В каталоге сервисов AWS вы можете добавить портфолио и продукт теги которые объединяются и автоматически применяются к продукту при его запуске.Более строгие формы проактивного управления включают автоматизированные задачи. За Например, вы можете использовать API тегов групп ресурсов для поиска в AWS теги среды или запускать сценарии для карантина или удаления неправильно помеченных Ресурсы.
Узнать больше
На этой странице представлена общая информация о тегах ресурсов AWS. Для большего информацию о тегах ресурсов в конкретном сервисе AWS см. документация. Следующие источники также являются хорошими источниками информации о тегах:
Управление тегами в Microsoft Teams — Microsoft Teams
- 5 минут на чтение
- Применимо к:
- Microsoft Teams
В этой статье
Примечание
Развертывается одна из функций, обсуждаемых в этой статье, тегирование с помощью shift .Если вы администратор, вы можете узнать, когда эта функция будет выпущена для вашего региона, в Центре сообщений (в центре администрирования Microsoft 365). Чтобы быть в курсе предстоящих функций Teams, ознакомьтесь с планом развития Microsoft 365.
Обзор
Тегив Microsoft Teams позволяют пользователям быстро и легко связываться с подмножеством людей в команде. Вы можете создавать и назначать настраиваемые теги для классификации людей на основе атрибутов, таких как роль, проект, навыки или местоположение. Или теги могут быть автоматически назначены людям на основе их расписания и информации о смене в приложении смены (скоро).После того, как тег добавлен к одному или нескольким членам группы, его может использовать в @mentions любой член команды в сообщении на канале или для начала беседы только с теми людьми, которым назначен этот тег.
Как упоминалось ранее, в Teams есть два типа тегов.
- Пользовательские теги : владельцы команд и члены группы (если для них включена функция) могут вручную создавать и назначать теги людям. Например, теги «Дизайнер» или «Радиолог» дойдут до этих групп людей в команде без необходимости вводить их имена.
- Добавление тегов по смене : с помощью этой функции людям автоматически назначаются теги, соответствующие их расписанию и имени группы смен в приложении «Смена» в Teams. Например, тег «EngineerOnCall» достигает всех инженеров, которые должны работать в сменах во время использования тега в чате или сообщении на канале. С пометкой по сменам Teams позволяет не догадываться, зная имена дежурного персонала, когда пользователям необходимо быстро передать информацию. Пометка по сменам также может поддерживаться основными системами управления персоналом, такими как JDA, Kronos и AMiON, путем интеграции их со сменами в командах.Чтобы узнать больше о том, как настроить эту функцию, см. Настройка тегов по смене.
Примечание
Теги пока не поддерживаются в частных каналах. Теги развертываются в облаке сообщества правительства США (GCC). Теги недоступны в организациях GCC High или Министерства обороны (DoD).
Тег может быть добавлен вручную или автоматически назначен человеку в определенной команде. Затем его можно использовать в @ упоминаниях в строке с по в чате или в сообщении на любом стандартном канале команды.Вот несколько примеров того, как теги могут использоваться в Teams:
- Менеджер магазина отправляет объявление на канал, чтобы уведомить всех кассиров.
- Администратор больницы отправляет сообщение всем радиологам в канале.
- Менеджер по маркетингу начинает групповой чат со всеми дизайнерами.
- Медсестра отправляет сообщение всем дежурным кардиологам. (скоро)
- Системный инженер отправляет объявление на канал, чтобы уведомить всех сменных полевых инженеров.(скоро)
Когда тег @ упоминается в разговоре на канале, члены команды, связанные с тегом, получат уведомление, как и любое другое @mention.
Как администратор, вы можете контролировать использование тегов в вашей организации в центре администрирования Microsoft Teams. В настоящее время вы не можете использовать PowerShell для управления тегами.
В группе может быть до 100 тегов, до 100 членов команды могут быть назначены тегу, и до 25 тегов может быть назначено одному пользователю.
Установить, кто может добавлять пользовательские теги
По умолчанию владельцы групп могут добавлять собственные теги. Вы можете изменить этот параметр, чтобы разрешить владельцам групп и членам группы создавать, редактировать, удалять и управлять тегами, или вы можете отключить теги для своей организации.
На левой панели навигации центра администрирования Microsoft Teams щелкните Настройки для всей организации > Настройки Teams .
В разделе Теги , рядом с тегами управляет , выберите один из следующих вариантов:
- Владельцы и участники групп : разрешить владельцам и участникам групп управлять тегами.
- Владельцы групп : Разрешить владельцам групп управлять тегами.
- Отключено : Отключить теги.
Настройка параметров пользовательских тегов
Вы можете настроить следующие параметры тегов, чтобы управлять тем, как пользовательские теги используются в вашей организации.
На левой панели навигации центра администрирования Microsoft Teams щелкните Настройки для всей организации > Настройки Teams .
В разделе Tagging установите следующие параметры в зависимости от потребностей вашей организации.
- Разрешить владельцам групп переопределять, кто может управлять тегами : Когда вы включаете этот параметр, владельцы групп могут устанавливать, могут ли члены группы создавать теги и управлять ими в группе, а значение тегов управляется с помощью параметра по умолчанию ценность для каждой команды. Если вы отключите этот параметр, теги управляются с помощью параметра , который нельзя изменить для каждой команды.
- Предлагаемые теги по умолчанию : Используйте это, чтобы добавить набор тегов по умолчанию. Вы можете добавить до 25 тегов, каждый тег может содержать максимум 25 символов.Владельцы и участники групп (если для них включена функция) могут использовать эти предложения, добавлять к ним или создавать новый набор тегов.
- Разрешить создание пользовательских тегов : включите этот параметр, чтобы люди могли добавлять теги, отличные от предлагаемых тегов по умолчанию, которые вы установили. Если этот параметр отключен, люди могут использовать только предложенные теги по умолчанию. Если вы отключите это, убедитесь, что вы добавили один или несколько тегов по умолчанию.
Если вы включили Разрешить владельцам групп переопределять, кто может управлять тегами, параметр в центре администрирования Microsoft Teams, владельцы групп могут указать, могут ли участники добавлять теги на уровне группы.Для этого на вкладке Настройки для группы перейдите к Теги , а затем выберите, кто может добавлять теги.
Вот как добавить пользовательские теги и как настроить тегирование по смене (если вы используете приложение «Сдвиги» в Teams). Чтобы узнать больше, ознакомьтесь с использованием тегов в Teams.
Создание и назначение пользовательских тегов
Чтобы создать и назначить настраиваемые теги, выберите Команды в левой части приложения, а затем найдите свою команду в списке. Выберите ˙˙˙ Дополнительные параметры , а затем выберите Управление тегами .Здесь вы можете создавать теги и назначать их людям в вашей команде.
Чтобы удалить тег, выберите ˙˙˙ Дополнительные параметры рядом с тегом, а затем выберите Удалить тег .
Настроить теги по смене
- В Teams перейдите в приложение смены.
- Создайте группы смен и назовите их после атрибута, например роли. Например, EngineerOnCall. Имя группы смен будет именем тега.
- Заполните график, назначив смены членам ваших команд. Когда вы закончите, в правом верхнем углу приложения Shifts выберите Поделиться с командой .
- Подождите 15 минут, пока запланированные смены не заполнят службу тегов.
- Используйте тег везде, где вы используете теги в Teams.
Пометка по сменам позволяет вашим пользователям общаться с дежурными людьми в режиме реального времени. Уведомления отправляются только тем людям, которые находятся в смене во время использования тега для начала чата или публикации в канале.
Использование тегов в командах
Управление сменами для вашей организации в Teams
Справочная документация по сменамТеги | Pew Research Center
Забудьте Дьюи и его десятичные дроби, пользователи Интернета революционизируют способ классификации информации и ее понимания
Так же, как Интернет позволяет пользователям создавать и обмениваться своими собственными медиа, он также позволяет им организовывать цифровые материалы по-своему, а не полагаться на уже существующие форматы классификации информации. Опрос, проведенный в декабре 2006 г. Pew Internet & American Life Project, показал, что 28% пользователей Интернета отметили или классифицировали контент в Интернете, такой как фотографии, новости или сообщения в блогах. В обычный день онлайн 7% интернет-пользователей отмечают или классифицируют онлайн-контент.
Эти люди ответили «да» на следующий вопрос: «Скажите, пожалуйста, если вы когда-нибудь использовали Интернет для категоризации или маркировки онлайн-контента, такого как фотография, новость или сообщение в блоге». Формулировка была разработана с учетом растущего использования тегов на таких сайтах, как http: // del.icio.us/ (сайт для обмена закладками браузера), http://www.flickr.com/ (сайт для обмена фотографиями), http://youtube.com/ (сайт для обмена видео) и http: // technorati .com / (поисковая система по блогам).
Теги становятся все более популярными как вид деятельности, который некоторые классифицируют как отличительный признак Web 2.0, отчасти потому, что они продвигают и персонализируют онлайн-поиск. Традиционно поиск в Интернете (или на веб-сайтах) выполняется с использованием ключевых слов. Добавление тегов — это своего рода феномен поиска на следующем этапе — способ пометить, сохранить и затем извлечь веб-контент, который пользователи уже сочли ценным и который они хотят отслеживать.Конечно, она больше приспособлена к индивидуальным потребностям и не предназначена для использования в качестве всеобъемлющей системы, которую Мелвил Дьюи пытался создать с помощью своей схемы каталогизации библиотечных материалов, основанной на десятичных числах.
В книге, которая выйдет 1 мая, Все разное: сила нового цифрового беспорядка (Times Books) , Дэвид Вайнбергер, сотрудник Гарвардского центра Интернета и общества Беркмана и известный блогер, описывает как люди объединяют идеи, информацию и знания теперь, когда цифровая эпоха поощряла альтернативы организации информации из иерархических систем, таких как десятичный метод Дьюи.Онлайн-интервью с Вайнбергером представлено в конце этой статьи.
Как работают теги
Это первый раз, когда проект спрашивает о тегах, поэтому неясно, насколько быстро растет тенденция. Добавление тегов — одно из новых направлений деятельности Web 2.0, вокруг которого ведутся споры о том, что официально следует считать тегами. То есть, что отличает тегирование как отдельное действие, скажем, от создания традиционной закладки браузера?
Чтобы усложнить проблему, вероятно, есть люди, создавшие тег, которые будут использовать другой термин для обозначения действия.Например, некоторые сайты предлагают пользователям применять к контенту «ярлыки» и не используют слово «тег». Функция тегов Google на самом деле называется «закладкой», хотя в ней применяются принципы тегов. Другие сайты позволяют добавлять теги так легко, что люди могут не осознавать, что делают это.
Теги — это процесс создания ярлыков для онлайн-контента. Механика проста на большинстве веб-сайтов, ориентированных на теги, и есть приложение к этому отчету, в котором есть ссылки на некоторые сайты, которые более полно раскрывают механизмы тегов.
После создания учетной записи на таком сайте, как Flickr.com, вы можете загружать свои фотографии на сайт, а затем применять ярлыки к изображениям, которые имеют для вас значение — например, пометив фотографию заката как «закат». После применения ярлыков любой, кто использует строку поиска Flickr и набирает «закат», сможет найти вашу среди других изображений с похожими названиями.
Вы также можете выполнять поиск по сайту, используя ключевые слова, и когда вы найдете опубликованные другими фотографии фотографии, которые вам достаточно нравятся, чтобы их можно было восстановить позже, вы можете применить к ним свои собственные теги.Это может означать, что вы называете чужую картину «закатом», хотя изначально он назвал ее «облаками».
Затем с любого компьютера, подключенного к Интернету, вы возвращаетесь в окно поиска на Flickr.com, вводите созданные вами ярлыки и находите все материалы, которые вы отметили — как ваши, так и материалы других, которые вы отметили по-своему. . Таким образом, ввод «закат» приведет к результатам поиска, которые перенесут вас к изображениям, которые вы пометили таким образом.
Теги могут быть полезны не только для людей, которым нужны более простые способы поиска интересующей их информации, но теги также имеют социальное измерение.Ваши теги на Flickr добавляются к миллионам других ярлыков на сайте, что позволяет Flickr лучше систематизировать информацию для других поисковиков, использующих эти ключевые слова, что делает это классическим примером построения категорий снизу вверх вместо навязывания категорий сверху вниз. категории.
Ваши теги также позволяют Flickr выделять самые популярные объявления. Эти «облака тегов» иллюстрируют материал, который был помечен другими, а сайты тегов обычно демонстрируют наиболее популярные теги, увеличивая размер шрифта и жирность шрифта, как это делает Flickr здесь: http: // www.flickr.com/photos/tags/.
Кто тегеры
Taggers выглядят как классические первопроходцы технологий. Они, скорее всего, моложе 40 лет, имеют более высокий уровень образования и доходов.
Tagger’ы с гораздо большей вероятностью будут иметь дома широкополосное подключение, чем подключение по телефонной линии. Мужчины и женщины с одинаковой вероятностью будут метить теги, в то время как онлайн-меньшинства несколько чаще, чем белые, будут тегерами.
Акт маркировки, вероятно, будет воспринят более широким кругом населения в будущем, потому что многие организации упрощают и упрощают маркировку интернет-контента.Например, пользователи Gmail могут маркировать свой контент электронной почты, а пользователи Amazon могут применять ярлыки по своему выбору к книгам и другим опубликованным материалам.
Yahoo добавила веб-приложения, упрощающие пометку и хранение веб-страниц. У некоторых сайтов есть кнопки на своих веб-страницах, которые позволяют сохранять их контент на сайтах с тегами простым щелчком мыши.
Есть даже сообщения о том, что некоторые веб-пользователи теперь сделали сайты с тегами своей домашней страницей, что сделало эти сайты, по крайней мере, номинальными конкурентами крупных медиа-компаний, которые надеются, что пользователи начнут свой онлайн-опыт на их главной странице.
Сайты с тегами становятся все популярнее
Данные Hitwise, фирмы, занимающейся отслеживанием веб-сайтов, показывают, что сайты с тегами, такие как Flickr и del.icio.us, становятся все популярнее по мере того, как пользователи Интернета узнают о них.
Данные представлены как процент от всего веб-трафика.
Del.icio.us — это сайт, на котором люди могут помечать закладки своего сайта и, опять же, делиться своими тегами с другими.
Почему важны теги: интервью с Дэвидом Вайнбергером
В своей готовящейся к выходу книге Все разное: сила нового цифрового беспорядка Вайнбергер описывает, насколько радикальным для людей является отход от иерархической классификации информации, такой как десятичная система Дьюи, к индивидуальным и групповым системам.
В мире Мелвила Дьюи вся информация разделена на десять основных тематических категорий, которые могли иметь смысл для хорошо образованных жителей Запада, разделяющих взгляды Дьюи, но, возможно, не для других. Например, Дьюи присвоил литературе блок чисел 800–899, а затем раздал числа 800–889 американским, европейским и классическим языкам. Таким образом, он втиснул все остальные литературные произведения в оставшиеся 10 цифр. Между прочим, это означает, что русская литература даже не получила своего целого номера.Среди восточно-индоевропейских и кельтских литератур он находится под 891,7.
Для Дьюи было также совершенно логично, что он перечислил материалы, относящиеся к домашним животным, в «технологическом» блоке чисел в цифрах 600. Вот как он это понял:
В мире категорий и значений, создаваемых пользователями в 21 -м веке , это, возможно, уже не так полезно или разумно, как раньше. Дэвид Вайнбергер продумал множество способов, которыми тегирование меняет отношение людей к информации и друг к другу.Итак, я обменялся с ним электронными письмами на эту тему и вот результат:
В: С чего начался нынешний интерес к тегам?
Weinberger : Сайт закладок http://del.icio.us ударил по нерву [в 2003 году], когда он позволил пользователям помечать веб-сайты одним или двумя словами, чтобы они могли найти эти сайты позже. И http://www.flickr.com поразил то же самое, когда он применил теги как способ позволить людям систематизировать публикуемые ими фотографии.
Но нерв был готов к поражению благодаря двум факторам:
Во-первых, тегирование позволяет нам организовать обширную сеть — и даже нашу электронную почту, как показал Gmail — с помощью категорий, которые важны для нас как отдельных лиц. Вы можете пометить, скажем, историю Стивена Кинга как «ужас», но, возможно, для меня это «история о привидениях», а для профессора литературы — «поп-культура». Теги позволяют нам организовать Сеть по-своему.
Во-вторых, теги являются социальными. Раньше теги назывались «ключевыми словами», и они используются нами уже давно.Но только недавно мы обнародовали их. Это имеет большое значение. Выполняя поиск по тегу, мы можем найти материал, который другие обнаружили впереди нас: на странице «Самые популярные теги» Amazon (http://www.amazon.com/gp/tagging/cloud/ref=tag_sr_nss/103-6276287- 3099815) поиск по тегу «ужасы» дает почти три тысячи книг и фильмов.
Добавление тегов также позволяет социальным группам формироваться на основе схожих интересов и точек зрения. Если вы используете те же теги, что и я, вероятно, у нас есть некоторые общие черты.
И, просмотрев публичное поле тегов, мы можем увидеть, какие теги используются наиболее часто и как они связаны. Эти паттерны называются фолксономиями — это игра слова «таксономии». Фолксономия показывает, как публика понимает вещи, а не только то, как опытные каталогизаторы думают, что мы, , должны думать, .
В: Как вы думаете, почему пользователи Интернета тянутся к тегам?
Weinberger: Это действительно полезно.Сравните свою традиционную компьютерную систему для организации цифровых фотографий с использованием системы тегов. Вместо того, чтобы помещать фотографию в одну папку — скажем, «Поездки 2006» — вы можете легко пометить ее как «Италия», «годовщина», «закат», «горы» и «без детей». Вы можете мгновенно собрать виртуальные альбомы всех ваших юбилейных фотографий или всех ваших фотографий всех ваших поездок в Италию и т. Д.
Есть и альтруистический призыв к тегированию. Пометка на общедоступных сайтах может дать вам представление о том, что вы добавляете общий поток знаний.На сайте del.icio.us или других подобных сайтах пометьте страницу словом «робототехника», и вы знаете, что она автоматически добавляется в список страниц, помеченных таким образом, чтобы любой, кто интересуется этой темой, мог ее найти.
Q: Итак, есть преимущества, помимо индивидуальных.
Вайнбергер: Совершенно верно. Возможно, самое интересное в тегах — это то, что теперь у нас есть миллионы и миллионы людей, которые публично говорят то, о чем, по их мнению, относятся страницы и изображения.Это важная информация, которую мы можем использовать, чтобы собрать воедино новые идеи и информацию через бескрайнее море, которое мы создали для себя.
В: Создание тегов создает проблемы?
Вайнбергер: Что нет? Теги работают, потому что они такие простые, но поскольку они такие простые, они могут быть неоднозначными. Тег «римский», например, может относиться к итальянскому фонтану, режиссеру Роману Полански или французскому слову «роман». Так что есть вероятность недопонимания.А если вы выполните поиск фотографий с меткой «Сан-Франциско», вы можете не увидеть фотографии с меткой «sf» или «Золотые ворота». Так что, если вам нужно найти все по теме, вы часто не можете полагаться на теги.
В более широком смысле, некоторые опасаются, что фольксономия может быть разновидностью «тирании большинства», при которой преобладающий образ мышления группы о мире подавляет местных и причудливых. Это то, чего стоит остерегаться, но, анализируя наборы тегов, мы также можем создать тезаурус тегов, который знает, что тег «roman» может быть эквивалентен тегу «роман» в некоторых случаях.
В: Какое будущее у тегов?
Weinberger: Поскольку это полезно, когда информации много и информация действительно значима для людей, она будет все более и более широко применяться.