如何检查文本是否包含在django中以'#'开头的单词?

如何检查文本是否包含在django中以'#'开头的单词?

问题描述:

我试图在我的博客应用程序上实现标签功能。如何检查文本是否包含在django中以'#'开头的单词?

如何检查帖子的“文本”是否包含以'#'开头的单词,如果是,请将它们重定向到/ tags /〜word〜?

so f.e.用户可以写一篇文章'我去过#ny今天,它很酷#yolo #summer',因此它会创建#ny,#yolo,#summer标签,并使其重定向到/ tags/ny /,/标签/ YOLO /和/标签/夏/,

我正在学习Python和Django的只是像一两个星期,也许那里有一些功能我不知道:)

+0

您可能还想检查'taggit'包:http://django-taggit.readthedocs.io/en/latest/ – FlipperPA

+0

对不起@obi,我删除了我的答案,因为这实际上是一个坏主意,你不应该把原始的HTML放在这样的字符串中(Django甚至会试图阻止你在你的模板中)。其他更了解Django的人必须回答。 –

+0

使用template_tag和正则表达式。 – C14L

与更换#tags<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 hash(text): return re.sub(r'#(\ w +)',r'#\1',text)和在模板中:'{{post.text | hash | linebreaks}}'问题是页面上的输出是原始html值,所以它看起来像'#xxx'而不是#xxx,带有链接到标签。我可以将'| safe'标签添加到模板中,但可以让用户使用其他html代码。我怎么能解决这个问题? – obi