如何将html div渲染到我的基本模板中?

时间:2015-06-03 11:23:10

标签: python django

我使用urllib和BeautifulSoup从Nasdaq废弃html。如何将html结果呈现到视图中。

def data(request, symbol):
   context_dict = {}

   NASDAQ = "http://www.nasdaq.com/symbol/{}/financials?query=income-statement".format(symbol)

   import urllib.request
   from bs4 import BeautifulSoup

   user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'
   headers = {'User-Agent': user_agent, }
   assembled_request = urllib.request.Request(NASDAQ, None, headers)  # The assembled request
   response = urllib.request.urlopen(assembled_request)
   html_data = response.read()  # The data u need

   soup = BeautifulSoup(html_data)
   genTable = soup.find_all("div", class_="genTable")

   context_dict['genTable'] = genTable

   return render(request, 'data.html', context_dict)

模板:

{% extends 'base.html' %}
{% block body_content %}
    <h1>{{ symbol }}</h1>
    {% if genTable %}
        {{ genTable }}
    {% endif %}
{% endblock %}

上面的模板会将实际的html字符串(<html></html>...)添加到视图中:

NASDAQ
<html>
    <head>...</head>
    <body>MYSTOCK:100$</body>
</html>    

我想将html嵌入到我的模板中,所以我得到了这个结果:

NASDAQ
MYSTOCK:100$

1 个答案:

答案 0 :(得分:3)

在你的代码中,django默认使用安全默认值,转义变量searchView.onActionViewCollapsed() 中包含的html和javascript以避免安全问题。

告诉django该变量包含应作为页面一部分执行的html和javascript,您需要使用{% autoescape %}

genTable

然而,这会将内容放在您的网站中,就像它是您的代码一样。我们不建议在您的网站上放置来自第三方的未经授权的代码。

编辑: 在评论中,@ IanAuld提出了有用的评论,即内置过滤器safe具有相同的效果:

{% extends 'base.html' %}
{% block body_content %}
    <h1>{{ symbol }}</h1>
    {% autoescape off %}
        {{ genTable }}
    {% endautoescape %}
{% endblock %}