如何在 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 中的自定义过滤器

我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误

Django中的自定义过滤器

django模板中的自定义过滤器

Django 找不到我的自定义模板过滤器