2016-09-27 66 views
-1

在我的Django項目中,如果星號*出現在文本的開始和結尾處,我們在Stack Overflow中具有相同的功能,那麼我想使文本變爲粗體。雖然我將**轉換爲<b>,但由於輸出轉義,它變成了&lt;b&gt;。實現這一目標的正確方法是什麼?帶星號的粗體文本

模板文件包含{{ anidea.description|format_text}}

format_text是自定義模板過濾器

代碼..

from django import template 
from django.utils.safestring import mark_safe 


register = template.Library() 

@register.filter(name='format_text') 
def custom_formating(value): 
    for word in value.split():  

    start = word[:2] 
    end = word[-2:] 

    if start == '**' and end == '**': 
     word = word[2:-2]   
     word = '<b>' +word+ '</b>' 
     mark_safe(word)  


    return value 
+2

您能否顯示當前實現的[mcve]?你有沒有考慮過使用現有的Markdown庫?閱讀Django何時以及如何應用HTML轉義? – jonrsharpe

+0

「Bold for Delphi是一種先進的對象關係映射器(ORM)和應用框架,不要用於名爲」bold「的字體樣式。添加標籤時請閱讀您的標籤說明。 – Sayse

+0

我是新來的django ..對圖書館沒有太多的瞭解 – Shri

回答

0

如果你想要全套的所有降價的特點,去與現有的降價庫。

如果你只是想<b>直接打印到源代碼W/O逃逸,使用

{{ some_var|safe }} 
+0

我不想關閉'autoescape' – Shri

0

我做到了,在下面的方式。

views.py

i.description = i.description.split() #use of split() 

模板文件(的Format_Text是custom template filter

{% for text in anidea.description %} 
    {{ text|format_text }} 
{% endfor %} 

濾波器

@register.filter(name='format_text') 
def custom_formating(value): 
start = value[:2] 
end = value[-2:] 

if start == '**' and end == '**': 
    value = value[2:-2]   
    value = '<b>' +value+ '</b>' 
    return mark_safe(value) 
else: 
    return value 

用這種方式,我可以實現輸出轉義爲了描述和期望的文本格式。