-2

私はsafeフィルターを使用しており、タグ内にある HTML タグのみにエスケープしたい<code></code>、つまりHello<b>Hello</b>としてレンダリングされますが、 としてレンダリングされます。したがって、カスタムフィルターを作成しますが、次のエラーが発生します:<code><b>Hello</b></code><b>Hello</b>

Exception Type: AttributeError
Exception Value:'ResultSet' object has no attribute 'replace'
Exception Location: G:\python\Python\python practice\python website\firstpage\custom_filters\templatetags\custom_filters.py in code_escape, line 10

私のコードは次のとおりです。

from bs4 import BeautifulSoup

from django import template
register = template.Library()

@register.filter
def code_escape(value):
    soup = BeautifulSoup(value)
    response = soup.find_all('code')
    string = response.replace('<', '&lt;')
    string = string.replace('>', '&gt;')
    string = string.replace("'", '&#39')
    string = string.replace('"', '&quot')
    final_string = string.replace('&', '&amp')
    return final_string

template.html

.......

{% load sanitizer %}
{% load custom_filters %}

......

{{ content|escape_html|safe|linebreaks|code_escape }}

.......
4

1 に答える 1

0

find_all反復可能な a を返しますResultSet.stringタグの値を編集できると思います。次のようなことを試してください:

soup = BeautifulSoup(value)
for code_tag in soup.find_all('code'):
    code_tag.string = code_tag.string.replace('<', '&lt;')
    code_tag.string = code_tag.string.replace('>', '&gt;')
    code_tag.string = code_tag.string.replace("'", '&#39')
    code_tag.string = code_tag.string.replace('"', '&quot')
    code_tag.string = code_tag.string.replace('&', '&amp')
return str(soup)
于 2013-10-21T12:51:53.887 に答える