読者です 読者をやめる 読者になる 読者になる

万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Django 1.11でのタグ使用時に勝手にエスケープされてしまう

今までこのように買いていた。

@register.simple_tag
def calc_rate(star):
    """
    星を計算する(評価者一覧の方)
    :param star: 星の数の数字
    """
    html = """
        <p>
    """
    star = '<span class="glyphicon glyphicon-star"></span>' * star
    html += star
    html += """
        </p>
    """
    return html

しかし、いざtemplateで

                <div class="ratings">
                    {% calc_rate item.star %}
                </div>

のように使用するときにHTMLのタグ自体がそのまま表示されてしまう。

https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

おそらくエスケープを勝手にされていた?ので。 from django.utils.safestring import mark_safeをインポートし、 最後のreturnにて

    return mark_safe(html)

したら大丈夫になった。