2016-05-14 5 views
0

ブログアプリケーションにタグ機能を実装しようとしています。テキストにdjangoで '#'で始まる単語が含まれているかどうかを確認するには?

投稿の「テキスト」に「#」で始まる単語が含まれているかどうかを確認するにはどうすればいいですか?そうであれば、/ tags /〜word〜にリダイレクトされるURLにしますか?

so f.e.ユーザーは#ny、#yolo、#summerタグを作成し、/ tags/ny /、/にリダイレクトするURLを作成するように、「今日は#nyに行ってきました。タグ/ YOLO /、および/タグ/夏/、

私のpythonを学び、週または2のように、おそらく私が持つ#tagsの交換:)

+0

また、 'taggit'パッケージを確認することもできます:http://django-taggit.readthedocs.io/en/latest/ – FlipperPA

+0

申し訳ありません@obi、私は実際には悪い考えだから私の答えを削除しますそのような文字列に生のHTMLを置くべきではありません(Djangoはあなたのテンプレートであなたを止めようとします)。 Djangoをよく知っている誰かが答えなければならないでしょう。 –

+0

template_tagと正規表現を使用します。 – C14L

答えて

0

を認識していないよ、いくつかの機能をtheresの唯一のためのDjangoのよ<a href="/tag/links">links</a>は簡単な部分です

>>> import re 
>>> t = 'Some #cool text here #whatya think!' 
>>> re.sub(r'#(\w+)', r'<a href="/tag/\1">\1</a>', t) 
'Some <a href="/tag/cool">cool</a> text here <a href="/tag/whatya">whatya</a> think!' 

さらに重要なことは、安全にすることです。

テンプレートで{% link_tags t %}のように簡単に呼び出せるように、テンプレートタグを使用できます。しかし、自分のHTMLを追加する前に、生のHTMLをフィルタリングまたはエスケープする必要があります。ユーザーからのフィルタリングされていない文字列にmark_safe()を使用しないでください!これまで

+0

私は新しいフィルタを作成しました: '@ register.filter(name = 'hash') defハッシュ(テキスト): リターンre(r '#(\ w +)'、r '#\1'、text)' '{{post.text | hash | linebreaks}}'問題は、ページ上の出力が未処理のhtml値なので、タグにリンクする#xxxではなく、 '#xxx'のように見えるということです。テンプレートに '| safe'タグを付けることができますが、これはユーザーが他のHTMLコードを使用できるようにします。どうすればそれを修正できますか? – obi

関連する問題