这是我的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': ['']}>
如何解决此问题?
答案 0 :(得分:1)
这与Django不相关,“&”字符用于分隔http请求中的查询字符串参数。因此,当您在参数中使用“&”字符时,服务器应用程序会认为这是下一个参数的开始。
您需要先对查询字符串参数进行编码,然后再将其发送到服务器。这样做的方式会有所不同,具体取决于您发送请求的平台,但是在Javascript上,您可以使用 encodeURIComponent 函数。
encodeURIComponent('example/2020/4/4/'53-lorem-ipsum'')
返回“ example%2F2020%2F4%2F4%2F%26apos%3B53-lorem-ipsum%26apos%3B”
那么您的Django应用应该可以将其解析为单个参数。