(images_title_generation_on_upload)= # 업로드 시 제목 생성 이미지를 업로드할 때 Wagtail은 파일 이름에서 파일 확장자를 제거하고 제목 필드를 채웁니다. 이 섹션에서는 이 파일 이름을 제목으로 변환하는 방법을 사용자 정의하는 방법에 대해 설명합니다. 파일 이름을 제목으로 변환하는 기능은 단일 파일 위젯, 다중 업로드 위젯 및 선택기 모달 내에서 사용됩니다. 문서에 대해서도 [동일한 동작을 사용자 정의](../documents/title_generation_on_upload)할 수 있습니다. `'wagtail:images-upload'` 이벤트를 수신하는 JavaScript [이벤트 리스너](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)를 사용하여 이 제목의 확인된 값을 사용자 정의할 수 있습니다. 편집기에 JavaScript를 추가하는 가장 간단한 방법은 [`insert_global_admin_js` hook](insert_global_admin_js)을 사용하는 것입니다. 그러나 이벤트 리스너를 추가하는 모든 JavaScript가 작동합니다. ## DOM 이벤트 수신할 이벤트 이름은 `'wagtail:images-upload'` 입니다. 이 이벤트는 이미지 업로드 `form` 에서 전달됩니다. 이벤트의 `detail` 속성에는 다음이 포함됩니다. - `data` - 사용할 `title` 을 포함하는 객체입니다. 확장자가 제거된 파일 이름입니다. - `maxTitleLength` - `Image` 모델 제목 필드의 최대 길이인 정수(또는 `null`)입니다. - `filename` - 원본 파일 이름입니다. 생성된 `Image` 제목을 수정하려면 `event.detail.data.title` 에 접근하여 업데이트하면 되며, 반환 값은 필요하지 않습니다. 단일 이미지 업로드의 경우, 사용자 지정 이벤트는 제목에 이미 값이 없는 경우에만 실행되므로 사용자가 입력한 내용을 덮어쓰지 않습니다. `event.preventDefault()` 를 호출하여 기본 동작을 막을 수 있습니다. 단일 업로드 페이지나 모달의 경우, 제목에 어떤 값도 미리 채우지 않습니다. 다중 업로드의 경우, 제목 제출을 피하고 이미지를 저장하는 데 제목이 필요하므로 파일 이름 제목(확장자 포함)만 사용합니다. 이벤트는 '버블링'되므로 전역 `document` 리스너를 추가하여 이러한 모든 이벤트를 캡처하거나, 특정 시나리오에서만 제목을 조정하도록 필요에 따라 리스너 또는 핸들러 로직의 범위를 지정할 수 있습니다. [사용자 지정 JavaScript 이벤트](https://developer.mozilla.org/en-US/docs/Web/Events/Creating_and_triggering_events)에 대한 자세한 내용은 MDN을 참조하세요. ## 코드 예제 아래 각 예제에 대해 앱의 정적 디렉토리(예: `static/js/`)에 지정된 외부 JavaScript 파일을 만들고 `wagtail_hooks.py` 파일에서 참조하세요. ### 제목에서 URL에 안전하지 않은 문자 제거 ```python # wagtail_hooks.py from django.templatetags.static import static from django.utils.html import format_html from wagtail import hooks @hooks.register("insert_global_admin_js") def get_global_admin_js(): script_url = static('js/wagtail_admin.js') return format_html('', script_url) ``` ```javascript // wagtail_admin.js window.addEventListener('DOMContentLoaded', function () { document.addEventListener('wagtail:images-upload', function (event) { const newTitle = (event.detail.data.title || '').replace( /[^a-zA-Z0-9\s-]/g, '', ); event.detail.data.title = newTitle; }); }); ``` ### 페이지 편집기에서만 생성된 제목을 변경하여 대시/밑줄 제거하기 대신 [`insert_editor_js` hook](insert_editor_js)을 사용하면 이 스크립트가 `Image` 업로드 페이지가 아닌 페이지 편집기에서만 실행됩니다. ```python # wagtail_hooks.py from django.templatetags.static import static from django.utils.html import format_html from wagtail import hooks @hooks.register("insert_editor_js") def insert_remove_dashes_underscores_js(): script_url = static('js/remove_dashes_underscores.js') return format_html('', script_url) ``` ```javascript // remove_dashes_underscores.js window.addEventListener('DOMContentLoaded', function () { document.addEventListener('wagtail:images-upload', function (event) { // 대시/밑줄을 공백으로 바꿉니다 const newTitle = (event.detail.data.title || '').replace( /(\s|_|-)/g, ' ', ); event.detail.data.title = newTitle; }); }); ``` ### 파일 이름을 기반으로 한 제목 자동 채우기 중지 ```python # wagtail_hooks.py from django.templatetags.static import static from django.utils.html import format_html from wagtail import hooks @hooks.register("insert_global_admin_js") def insert_stop_prefill_js(): script_url = static('js/stop_prefill.js') return format_html('', script_url) ``` 다음 코드를 static/js/stop_title_prefill.js로 저장하세요 ```javascript // stop_title_prefill.js window.addEventListener('DOMContentLoaded', function () { document.addEventListener('wagtail:images-upload', function (event) { // 단일 파일 업로드 시 제목 자동 채우기를 중지합니다 // 다중 업로드 제목을 파일 이름(확장자 포함)으로 설정합니다 event.preventDefault(); }); }); ```