Django项目页面无法正常加载使用emojionearea组件的问题求助
Django中emojionearea组件不生效修复方案
核心问题原因
代码存在两个直接导致组件失效的错误:
- 脚本加载顺序完全颠倒:组件初始化代码写在了所有JS依赖文件的前面,浏览器执行初始化逻辑时,还未加载jQuery、emojionearea本身的脚本文件,根本找不到对应的方法,自然无法渲染组件
- 重复加载jQuery:先后引入了jQuery 3.2.1 slim版和jQuery 3.6.0完整版,重复加载会覆盖之前已经注册的插件,且slim版本缺少部分jQuery核心功能,本身就不兼容部分第三方组件
修复步骤
- 调整脚本加载顺序,严格遵循「依赖库先加载,自定义业务逻辑最后执行」的规则,删除重复的jQuery slim版本引入代码
- 修正后的基础模板代码如下:
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>TODO</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <link rel="stylesheet" href="{% static 'css/emojionearea.min.css' %}"> <link rel="stylesheet" href="{% static 'css/main.css' %}"> </head> <body> {% include 'navbar.html' %} {% block content %} {% endblock content %} <!-- 按顺序加载依赖库,删除重复的jQuery slim引入 --> <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <script src="{% static 'js/emojionearea.min.js' %}"></script> <!-- 所有依赖加载完成后再执行初始化 --> <script> $(document).ready(function() { $("#mytextarea").emojioneArea(); }) </script> </body> </html>
- 完成代码调整后做两项校验:
- 按F12打开浏览器开发者工具,切换到Console面板,刷新页面确认不存在
$ is not defined、emojioneArea is not a function、静态资源404类报错 - 直接访问静态资源路径下的emojionearea.min.css、emojionearea.min.js文件,确认文件可以正常加载,不存在Django静态配置导致的资源找不到问题
- 按F12打开浏览器开发者工具,切换到Console面板,刷新页面确认不存在
额外说明
不需要把textarea移出form标签,emojionearea初始化后会自动和原文本域做值同步,放在form内部提交表单时可以正常传递输入内容(包含emoji),之前的这类修改完全没有必要。
内容的提问来源于stack exchange,提问作者Muhammad huzaifa
相关产品推荐
相关产品推荐

