2016-09-27 22 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は高度なObject Relational Mapper(ORM)とアプリケーションフレームワークです。" bold "というフォントスタイルには使用しないでください。タグの説明を追加するときは、そのタグの説明をお読みください。 – Sayse

+0

私はdjangoを新しくしています..ライブラリについてあまり気にしません – Shri

答えて

0

カスタムテンプレートフィルタであり、既存の値下げライブラリで行きます。

あなただけ<B>が

{{ some_var|safe }} 
+0

私は 'autoescape'をオフにしたくありません – Shri

0

を使用し、ソースコードW/O脱出に直接印刷したい場合、私は方法を以下にそれをやりました。

views.py

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

テンプレートファイル

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

Iは、説明のためのエスケープ出力を達成することができる。この方法にフィルタ

@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 

所望のテキストの書式(format_textはcustom template filterあります) 。

関連する問題