繁体   English   中英

Django:将 HTML 字符串传递给模板

[英]Django: Passing HTML string to template

我在尝试显示在 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 %}

花了我一段时间。 如果有人遇到类似的问题,这里有一些关于自动转义的信息

自动转义过滤器

如果有人因为最近的 django 版本登陆这里,请使用: {{ your_context_entry|safe }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM