如何在 django 的自定义过滤器中使用 % url % 来显示主题标签
Posted
技术标签:
【中文标题】如何在 django 的自定义过滤器中使用 % url % 来显示主题标签【英文标题】:how to use % url % inside a custom filter in django for displaying a hashtag如何在 django 的自定义过滤器中使用 % url % 来显示主题标签 【发布时间】:2021-11-07 09:42:18 【问题描述】:嗨,我想在帖子内容中在 django 中显示带有 url 的#hashtag。为此,我创建了一个简单的客户过滤器。但是我在使用“url 标签”时遇到了问题。 tag_name.py:
@register.filter(name='mention',is_safe=True)
@stringfilter
def mention(value):
res = ""
my_list = value.split()
for i in my_list:
if i[0] == '#':
if len(i[1:]) > 1:
<!-- my problem is here -->
i = f"<a href="% url 'recommendation_posts' %?q=i&submit=Search">i</a>"
res = res + i + ' '
return res
html:
<p> post.content|mention|safe </p>
例如:当有人写“我喜欢#python”时,我想呈现为“我喜欢#python”
我的主要问题是这个 % url % 在模板标签中不起作用。我该如何实现它谢谢。
【问题讨论】:
django 不希望从您调用的函数返回模板标签。根据 django,该行已经被解析。我认为这可能是问题所在。 @VishalSingh 谢谢你的回复。我已经解决了。 【参考方案1】:我自己发现的。我删除了过滤器中的 % url % 并使用了 urls.py 中的 url
@register.filter(name='mention',is_safe=True)
@stringfilter
def mention(value):
res = ""
my_list = value.split()
for i in my_list:
if i[0] == '#':
if len(i[1:]) > 1:
i = f'<a href="/recommendation/?q=%23i[1:]&submit=Search">i</a>'
res = res + i + ' '
return res
'%23' 用于在我的搜索表单中显示主题标签。出于某种原因,如果我使用 'q=#something&submit=Search',它只是找到没有主题标签的 'something'。但是使用 '%23' 它工作正常。
【讨论】:
以上是关于如何在 django 的自定义过滤器中使用 % url % 来显示主题标签的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 django-filters 过滤 ModelViewSet 中的自定义 url
Django 1.3 或更低版本的 Django Admin 中的自定义过滤器