2012-07-07 62 views
0

我有傳遞信息從數據庫中的視圖:某些HTML實體的代碼不被評估

def serve_article(request, id): 
    served_article = Article.objects.get(pk=id) 

    # Strips out new line and tab characters 
    article_snippet = served_article.full_text.replace('\n','').replace('\t','') 

    # Gets first 300 word characters 
    article_snippet = re.match(r'(.{,300})\W', article_snippet).group(1) 

    return render(request, 'article.html', {'served_article':served_article, 
              'article_snippet':article_snippet}) 

article_snippet,由它被呈現時的unicode字符串,包含許多HTML實體代碼(例如:’當呈現映射到’和©映射到©)

然而,{{ article_snippet }}模板不評估這些符號,讓他們的空白,好像他們是一個包裹標籤<code>(他們不是)內。

我在頂部有<meta charset="utf-8">,頁面上的其他符號評價很好,很清楚這些符號正在以某種方式逃脫。爲什麼會發生這種行爲,我該如何禁用它?

回答

2

Riateche建議使用安全過濾器,它可以爲您提供90%的時間,其他時間(需要將HTML格式化爲消息 - 使用django消息框架),您需要手動完成。

手動進行串安全:https://docs.djangoproject.com/en/1.4/ref/utils/#django.utils.safestring.mark_safe

from django.utils.safestring import mark_safe 

def serve_article(request, id): 
    served_article = Article.objects.get(pk=id) 

    # Strips out new line and tab characters 
    article_snippet = served_article.full_text.replace('\n','').replace('\t','') 

    # Gets first 300 word characters 
    article_snippet = re.match(r'(.{,300})\W', article_snippet).group(1) 

    # MARK THIS VALUE AS SAFE IN YOUR VIEW 
    article_snippet = mark_safe(article_snippet) 

    return render(request, 'article.html', {'served_article':served_article, 
             'article_snippet':article_snippet}) 
0

我在Django V1.9中發現,如果你堆棧中的其他模板標籤後的安全模板標籤,它不工作,所以一定要確保安全是後直接上下文變量!

的.py CODE

context['variable'] = "&trade;" 

HTML

以下工作

{{ variable|safe|capfirst|linebreaksbr }} -> displays: TM 

下列不WORK

{{ variable|capfirst|linebreaksbr|safe }} -> displays: &trade;