我正试图将一个包含html表的变量作为Django模板中的html表传递给它。
当我传递它并将其标记为|safe或关闭自动转义时。所有HTML都被插入,但表被完全删除,有人知道为什么以及如何关闭它吗?
import urllib.request
from bs4 import BeautifulSoup
tt_opener = urllib.request.build_opener()
tt_opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
tt_service = tt_opener.open('https://managed.mytalktalkbusiness.co.uk/network-status/')
tt_soup = BeautifulSoup(tt_service, "html.parser")
tt_data = tt_soup.table
模板
<div id="TALK-TALK-Service" style="width:50vw; height:50vw; float:left;">
{{ TalkTalk |kksafe }}
</div>
通过shell 打印的tt_data变量
<table border="0" cellpadding="0" cellspacing="0" class="opaltable" width="100%"><th nowrap="nowrap"> </th><th nowrap="nowrap">Issue</th><th nowrap="nowrap">Services affected</th><th nowrap="nowrap">Location</th><th nowrap="nowrap">Last update</th><tr><td width="20"><img src="https://managed.mytalktalkbusiness.co.uk/images/redlight.gif"/></td><td width="350"><a href="https://managed.mytalktalkbusiness.co.uk/network-status-report.php?reportid=15462">incident 10574541 - Washington Exchange - no service</a></td><td>Extranet, Ethernet, EoFTTC & EFM via TalkTalk, DSL via TalkTalk</td><td width="100">n/a</td><td nowrap="nowrap" width="150">11th Oct 2017 12:53</td></tr><tr><td width="20"><img src="https://managed.mytalktalkbusiness.co.uk/images/redlight.gif"/></td><td width="350"><a href="https://managed.mytalktalkbusiness.co.uk/network-status-report.php?reportid=15448">Incident 10573277 - Network – P1 – Some TTB customers are experiencing Post Dial Delay SIP/VOE</a></td><td>SIP/VOE</td><td width="100">n/a</td><td nowrap="nowrap" width="150">11th Oct 2017 12:27</td></tr></table>
网页上显示的html
<div id="TALK-TALK-Service" style="width:50vw; height:50vw; float:left;">
[ , Issue, Services affected, Location, Last update, <img src="https://managed.mytalktalkbusiness.co.uk/images/redlight.gif"><a href="https://managed.mytalktalkbusiness.co.uk/network-status-report.php?reportid=15462">incident 10574541 - Washington Exchange - no service</a>Extranet, Ethernet, EoFTTC & EFM via TalkTalk, DSL via TalkTalkn/a11th Oct 2017 12:53, <img src="https://managed.mytalktalkbusiness.co.uk/images/redlight.gif">, <img src="https://managed.mytalktalkbusiness.co.uk/images/redlight.gif">, <a href="https://managed.mytalktalkbusiness.co.uk/network-status-report.php?reportid=15462">incident 10574541 - Washington Exchange - no service</a>, <a href="https://managed.mytalktalkbusiness.co.uk/network-status-report.php?reportid=15462">incident 10574541 - Washington Exchange - no service</a>, Extranet, Ethernet, EoFTTC & EFM via TalkTalk, DSL via TalkTalk, n/a, 11th Oct 2017 12:53, <img src="https://managed.mytalktalkbusiness.co.uk/images/redlight.gif"><a href="https://managed.mytalktalkbusiness.co.uk/network-status-report.php?reportid=15448">Incident 10573277 - Network – P1 – Some TTB customers are experiencing Post Dial Delay SIP/VOE</a>SIP/VOEn/a11th Oct 2017 12:27, <img src="https://managed.mytalktalkbusiness.co.uk/images/redlight.gif">, <img src="https://managed.mytalktalkbusiness.co.uk/images/redlight.gif">, <a href="https://managed.mytalktalkbusiness.co.uk/network-status-report.php?reportid=15448">Incident 10573277 - Network – P1 – Some TTB customers are experiencing Post Dial Delay SIP/VOE</a>, <a href="https://managed.mytalktalkbusiness.co.uk/network-status-report.php?reportid=15448">Incident 10573277 - Network – P1 – Some TTB customers are experiencing Post Dial Delay SIP/VOE</a>, SIP/VOE, n/a, 11th Oct 2017 12:27]
</div>
您的tt_soup
变量是来自bs4的Tag
对象,而不是字符串。您可以在视图中查看此项。
tt_soup = BeautifulSoup(tt_service, "html.parser")
print(type(tt_soup))
由于tt_soup
对象是可调用的,Django模板语言在呈现表时会调用它,这会产生意外的结果。可以通过将tt_soup转换为视图中的字符串来防止这种情况。
tt_soup = BeautifulSoup(tt_service, "html.parser")
tt_soup = str(tt_soup) # unicode(tt_soup) in Python 2
可能有一种更合适的方法来调用tt_soup
对象而不是str()
,但我不知道,因为我对BeautifulSoup不是很熟悉。