8

私はDjango 1.3を使用しており、エスケープされていないHTMLを返す必要があるsimple_tagがありますが、何をしても&を&にエスケープしています。と私の | %7C に。

from django import template
from django.template import loader, Context
from django.utils.safestring import mark_safe

register = template.Library()

@register.simple_tag()
def show_stuff(arg1=None, arg2=None, arg3='someconstant'):

    # Do some stuff

    if someconstant == 'somevalue':
        template_name = 'template1.html'
    else:
        template_name = 'template2.html'

    template = loader.get_template(template_name)
    html = template.render(Context( {'myvar': myvar,} ))
    html = mark_safe(html)
    print type(html)
    return html

printステートメントは明らかにします

<class 'django.utils.safestring.SafeUnicode'>

私の理解では、これはエスケープされるべきではありません。テンプレートで次のようにタグを呼び出しています。

{% show_stuff 'arg1' 'arg2' 'arg3' %}

助けていただければ幸いです。

更新:以下のコメントから次のことを試しました。エラーは返されませんでしたが、それでも HTML はエスケープされます。

    ...
    template = loader.get_template(template_name)
    html = template.render(Context( {'myvar': myvar,} ))
    html = mark_safe(html)
    print type(html)
    return html
show_stuff().is_safe=True

また、template1.html と template2.html の内容をラップしてみました

{% autoescape off %}
template html contents with & and |
{% endautoescape %}

templatetag 呼び出し自体を autoescape タグでラップします。失敗。

4

2 に答える 2

4

古いスレッドですが、最近同じ問題に遭遇しました。Python 3.6で動作しました。単純なタグの値を変数 txt に割り当て、テンプレート タグ「{{」を使用して txt を出力し、安全なフィルターを txt に追加します。

{% get_contentvalue user "htmlabout" as txt %}
{{txt|safe}}
于 2020-01-08T02:15:50.157 に答える
3

質問の作者との話し合いの中で、キャラクターが実際に逃げられていないことがわかりました。Scoopseven(作成者)は、Firefoxのコンテキストメニューの[選択ソースを表示]オプションを使用してソースhtmlを表示しました。この場合、エスケープ文字が表示されます。

于 2012-07-26T20:26:11.407 に答える