点击按钮显示Django表单时出现未终止字符串字面量错误求助
解决JavaScript的"SyntaxError: unterminated string literal"错误
这个错误我之前也碰到过,根源出在你把Django模板变量{{form}}直接塞进了JavaScript的单引号字符串里。让我拆解一下问题:
当Django渲染页面时,{{form}}会被替换成你提供的那段HTML代码,而这段HTML里包含换行符(比如<textarea>标签里的空格换行)。JavaScript的单引号字符串是不允许直接跨行的,一旦渲染后的HTML出现换行,JS解析器就会认为你的字符串还没写完,直接抛出"unterminated string literal"错误。
给你两个靠谱的解决方案:
方案一:使用Django的escapejs过滤器转义内容
Django自带了专门处理JavaScript字符串转义的过滤器escapejs,它会把HTML里的换行、引号等特殊字符转成JS能识别的格式(比如把换行转成\n,单引号转成\')。修改你的JavaScript代码如下:
$(document).ready(function(){ $('#modifier').click(function(){ $('#modification').append('{{ form|escapejs }}'); $('#test').show() }); });
这样渲染后的JS字符串就会是一个完整、合法的字符串,不会出现未终止的问题。
方案二:提前隐藏表单,点击时再插入DOM
如果你的表单结构比较复杂,或者不想处理转义的问题,可以先把表单提前写在页面里并隐藏,点击按钮时再把它的HTML插入到目标位置。
首先在HTML中添加隐藏的表单容器:
<div id="hidden-form" style="display: none;">{{ form }}</div>
然后修改JavaScript代码:
$(document).ready(function(){ $('#modifier').click(function(){ $('#modification').append($('#hidden-form').html()); $('#test').show() }); });
这种方式绕开了把HTML直接写进JS字符串的问题,通过操作DOM元素的内容来插入表单,更直观也更不容易出错。
你可以根据自己的场景选其中一种方案试试,应该就能解决这个语法错误了。
内容的提问来源于stack exchange,提问作者Kloni
相关产品推荐
相关产品推荐

