Генерация заголовков при загрузке
При загрузке файла (документа), Wagtail использует имя файла, удаляет расширение файла и заполняет поле заголовка. Этот раздел посвящен тому, как настроить преобразование имени файла в заголовок.
Преобразование имени файла в заголовок используется в виджете для одного файла, виджете для множественной загрузки и внутри модальных окон выбора.
Вы также можете настроить это то же поведение для изображений.
Вы можете настроить результирующее значение этого заголовка, используя JavaScript обработчик событий, который будет реагировать на событие 'wagtail:documents-upload'.
Самый простой способ добавить JavaScript в редактор — через insert_global_admin_js хук, однако любой JavaScript, добавляющий обработчик событий, будет работать.
Событие DOM
Имя события, на которое следует реагировать, — 'wagtail:documents-upload'. Оно будет отправлено при загрузке документа form. Атрибут detail события будет содержать:
-
data— Объект, который включаетtitleдля использования. Это имя файла без расширения. -
maxTitleLength— Целое число (илиnull) — максимальная длина поля заголовка моделиDocument. -
filename— Исходное имя файла без удаленного расширения.
Чтобы изменить сгенерированный заголовок Document, обратитесь к event.detail.data.title и обновите его, значение возврата не нужно.
При загрузке одного документа пользовательское событие будет выполняться только в том случае, если у заголовка еще нет значения, чтобы не перезаписывать введенное пользователем значение.
Вы можете предотвратить стандартное поведение, вызвав event.preventDefault(). В случае страницы или модального окна с одной загрузкой это предотвратит предварительное заполнение значения в поле заголовка. При множественной загрузке это предотвратит отправку любого заголовка и будет использовать имя файла как заголовок (включая расширение), так как для сохранения документа требуется заголовок.
Событие «поднимается» вверх, поэтому вы можете просто добавить глобальный document обработчик для захвата всех этих событий, или вы можете ограничить область действия вашего обработчика или логики по мере необходимости, чтобы убедиться, что вы корректируете только заголовки в определенных сценариях.
См. MDN для получения дополнительной информации о пользовательских событиях JavaScript.
Примеры кода
Добавление расширения файла в начало заголовка
# wagtail_hooks.py
from django.utils.safestring import mark_safe
from wagtail import hooks
@hooks.register("insert_global_admin_js")
def get_global_admin_js():
return mark_safe(
"""
<script>
window.addEventListener('DOMContentLoaded', function () {
document.addEventListener('wagtail:documents-upload', function(event) {
var extension = (event.detail.filename.match(/\.([^.]*?)(?=\?|#|$)/) || [''])[1];
var newTitle = '(' + extension.toUpperCase() + ') ' + (event.detail.data.title || '');
event.detail.data.title = newTitle;
});
});
</script>
"""
)
Изменение сгенерированных заголовков только в редакторе страницы для удаления тире/подчеркиваний
Используйте insert_editor_js хук для того, чтобы этот скрипт не запускался на странице загрузки Document, а только в редакторах страниц.
# wagtail_hooks.py
from django.utils.safestring import mark_safe
from wagtail import hooks
@hooks.register("insert_editor_js")
def get_global_admin_js():
return mark_safe(
"""
<script>
window.addEventListener('DOMContentLoaded', function () {
document.addEventListener('wagtail:documents-upload', function(event) {
// replace dashes/underscores with a space
var newTitle = (event.detail.data.title || '').replace(/(\s|_|-)/g, " ");
event.detail.data.title = newTitle;
});
});
</script>
"""
)
Прекращение предварительного заполнения заголовка на основе имени файла
# wagtail_hooks.py
from django.utils.safestring import mark_safe
from wagtail import hooks
@hooks.register("insert_global_admin_js")
def get_global_admin_js():
return mark_safe(
"""
<script>
window.addEventListener('DOMContentLoaded', function () {
document.addEventListener('wagtail:documents-upload', function(event) {
// will stop title pre-fill on single file uploads
// will set the multiple upload title to the filename (with extension)
event.preventDefault();
});
});
</script>
"""
)
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/advanced_topics/documents/title_generation_on_upload.html