Django Quill Editor插入超链接自动拼接本地域名跳转异常
问题描述
- Django admin 后台集成 Quill Editor 后,输入
www.example.com格式的超链接时,系统不会生成正确的外部链接,模板渲染后的地址被拼接为localhost:8000/plants/www.example.com,点击后跳转至无效页面,预期效果为直接跳转至对应外部站点。
相关背景
- 已查阅 django-quill-editor 官方文档,未找到对应配置项,无法关闭 QuillEditor 插入超链接时自动拼接项目域名的行为。
- 怀疑问题与
urls.py配置相关,当前项目 plants 目录下的根路由配置如下:
urlpatterns = [ path('admin/', admin.site.urls), path('accounts/', include('allauth.urls')), path('accounts/', include('django.contrib.auth.urls')), path('', include('pages.urls')), path('plants/', include('plants.urls')), ]
- Django admin 后台 Quill 编辑器输入 URL 的操作界面:

- 模板页实际渲染的错误链接效果(鼠标悬浮链接时,浏览器左下角显示拼接后的错误地址):

解决方案
这个问题和路由配置完全无关,不需要修改urls.py任何内容,根因是Quill编辑器的链接默认逻辑:当输入的链接不带http:///https://协议头时,会被识别为站点内的相对路径,自然会拼接当前页面的路径前缀。
可以根据需求选择以下任意一种解决方式:
- 临时快速解决:插入外部链接时手动补全协议头,直接输入
https://www.example.com,编辑器会自动识别为绝对外链,不会再拼接本地路径。 - 永久自动处理:重写Quill工具栏的链接处理逻辑,用户输入链接时自动检测协议头,缺失时自动补全
https://,参考配置如下:
const quill = new Quill('#editor', { modules: { toolbar: { handlers: { link(value) { if (value) { const href = prompt('请输入链接地址:'); if (!href) return false; // 自动补全缺失的协议头 const formatUrl = /^https?:\/\//i.test(href) ? href : `https://${href}`; const range = this.quill.getSelection(true); this.quill.format('link', formatUrl); } else { this.quill.format('link', false); } } } } }, // 其余原有Quill配置保持不变 theme: 'snow' });
如果你使用的是django-quill-editor内置的默认初始化逻辑,只需要在页面中重写默认的Quill实例初始化代码,替换掉默认的link工具栏处理函数即可,不需要修改后端任何代码。
内容的提问来源于stack exchange,提问作者OfSorts
相关产品推荐
相关产品推荐

