我在尝试显示在django视图上创建的html代码段时遇到问题。这是正在发生的事情。
在我看来,我正在尝试将一本书的描述传递给模板,这些描述将根据用户的动作进行隐藏/显示。这些描述存储在服务器上的html文件中。
def my_view()
#loop through the list of books, read their corresponding a html file, and parse it to fill in the book details
#code, code, code...
#take the resulting string, append it on books description array, log it and send it to template
logger.debug(books_description["Clockwork orange"])
return render_to_response("my_template.html", {'bd': books_description}, context_thingy)
到现在为止还挺好。我的日志完全按照原样显示了html字符串:
<div id="modal_book_name">Clockwork orange</div>
<div id="modal_book_genre">Dystopian fiction</div>
<br>
<div id="modal_book_desc">yadayadayadayada</div>
现在,由于我不想将内容放在我的html代码上,因此我将书的描述读入javascript变量中,如下所示:
books_description = {};
{% for book, book_desc in bd.items %}
books_description["{{ book }}"] = "{{ book_desc|escapenewline }}"
{% endfor %}
escapenewline是一个过滤器,在每行的末尾添加一个\,以确保javascript能够正确解释整个字符串内容。
最终,当用户想要查看某本书的描述时,只需单击它,然后模态就会显示该书的描述。为此,我有:
console.log(books_description[book_name]);
$("#modal_info").html(books_description[book_name]);
同样,此console.log看起来一切正常:
<div id="modal_book_name">Clockwork orange</div><div id="modal_book_genre">Dystopian fiction</div><br><div id="modal_book_desc">yadayadayadayada</div>
不幸的是,当我打开页面时,modal_info div为空。当我打开浏览器的开发人员工具并检查div的html时,这就是我看到的内容:
<div id="modal_info">
"<div id="modal_book_name">Clockwork orange</div><div id="modal_book_genre">Dystopian fiction</div><br><div id="modal_book_desc">yadayadayadayada</div>"
</div>
问题出在那些引号中。他们是如何出现在那的?我如何摆脱它们?为什么将它们放在首位?
提前致谢。如果不清楚,请随时提出,我将予以澄清。
更新:嗯,事实证明modal_info div毕竟不是空的。.文本与背景只有相同的颜色。不好意思,我真傻。但是问题仍然存在。我应该看到的地方:
Clockwork Orange
Dystopian fiction
yadayadayadayada
我看到的是文字html:
<div id="modal_book_name">Clockwork orange</div><div id="modal_book_genre">Dystopian fiction</div><br><div id="modal_book_desc">yadayadayadayada</div>
我尝试使用parseHTML函数将字符串解析为HTML:
var book_desc = $.parseHTML(books_description[book_name]);
$("#modal_info").html(book_desc);
但是结果是一样的。任何想法如何使浏览器将字符串解释为html代码而不是文字字符串
问题解决了。不像我想的那么戏剧化。碰巧的是,django将html标记(例如“ <”和“>”)转换为“&lt”和“&gt”
这导致页面上的输出正确,但是无法创建相应的DOM对象。
解决方法:
{% autoescape off %}
{% for book, book_desc in bd.items %}
books_description["{{ book }}"] = "{{ book_desc|escapenewline }}"
{% endfor %}
{% endautoescape %}
花了我一段时间。如果有人遇到类似问题,这里有一些有关自动转义的信息
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句