首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django中对不可信文本使用urlize

在django中对不可信文本使用urlize
EN

Stack Overflow用户
提问于 2014-11-08 08:35:54
回答 1查看 415关注 0票数 1

我想在django应用程序中实现一些基本的减价。其目标是获取用户输入,并将其格式化为换行和url识别。

我知道我可以在模板中这样做:

代码语言:javascript
复制
{{ text|urlize|linebreaks }}

在不受信任的用户输入的视图中是否有这样做的方法?就像这样:

代码语言:javascript
复制
from django.utils.html import urlize 

def foo(request):
    text = urlize("<script>console.log('break')</script> www.bar.com")
    return render(request, 'index.html' {'text':text})

也就是说,让它将链接呈现为安全,但不呈现字符串的其余部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-08 08:46:37

答案可能是否定的(给出你的样本文本)

urlize的docs声明如下:

如果urlize应用于已经包含HTML标记的文本,事情就不会像预期的那样工作。仅将此筛选器应用于纯文本。

但是,如果您查看源或urlize,它实际上是非常直接的。您可能会提取出包含URL或电子邮件的相关部分,并将其直接传递给urlize函数。

Django不能将字符串的一部分标记为安全的原因是,它将整个字符串标记为安全,并返回一个安全字符串对象。如果您只希望字符串的一部分是安全的,那么它必须从父字符串中剪切出来,并使它自己安全(不支持只对字符串的一部分进行消毒,您可以对整个字符串进行消毒,或者不对其进行任何处理)。

这一点在SafeText的源代码中非常清楚。

代码语言:javascript
复制
class SafeText(six.text_type, SafeData):
    """
    A unicode (Python 2) / str (Python 3) subclass that has been specifically
    marked as "safe" for HTML output purposes.
    """
    def __add__(self, rhs):
        """
        Concatenating a safe unicode string with another safe byte string or
        safe unicode string is safe. Otherwise, the result is no longer safe.
        """
        t = super(SafeText, self).__add__(rhs)
        if isinstance(rhs, SafeData):
            return SafeText(t)
        return t

    def _proxy_method(self, *args, **kwargs):
        """
        Wrap a call to a normal unicode method up so that we return safe
        results. The method that is being wrapped is passed in the 'method'
        argument.
        """
        method = kwargs.pop('method')
        data = method(self, *args, **kwargs)
        if isinstance(data, bytes):
            return SafeBytes(data)
        else:
            return SafeText(data)

    encode = curry(_proxy_method, method=six.text_type.encode)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26815294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档