在Django URL中处理HTML特殊字符

时间:2020-05-04 13:23:07

标签: django django-rest-framework

这是我的django rest框架视图:

class NewsArticleViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = []
    serializer_class = NewsArticleSerializer
    pagination_class = None

    def get_queryset(self):
        slug = self.request.query_params.get('news', None)
        if slug:
            news = News.objects.filter(slug=slug)
            return news
        return []

除了我在url中传递html特殊字符这样的效果时,它运行得很好:

?news=example/2020/4/4/'53-lorem-ipsum'

它什么也没返回;因为self.request.query_params.get('news', None)解析为example/2020/4/4/而不是完整的字符串example/2020/4/4/'53-lorem-ipsum'

这里是self.request.query_params的值,用于调试:

<QueryDict: {'news': ['example/2020/4/4/'], 'apos': ['', ''], '53-lorem-ipsum': ['']}>

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

这与Django不相关,“&”字符用于分隔http请求中的查询字符串参数。因此,当您在参数中使用“&”字符时,服务器应用程序会认为这是下一个参数的开始。

您需要先对查询字符串参数进行编码,然后再将其发送到服务器。这样做的方式会有所不同,具体取决于您发送请求的平台,但是在Javascript上,您可以使用 encodeURIComponent 函数。

encodeURIComponent('example/2020/4/4/&apos;53-lorem-ipsum&apos;')

返回“ example%2F2020%2F4%2F4%2F%26apos%3B53-lorem-ipsum%26apos%3B”

那么您的Django应用应该可以将其解析为单个参数。

相关问题