确保在顶部导入它
import re
from django.http import JsonResponse
from django.utils.translation import gettext_lazy as _
from django.conf.urls import handler404
您可以在您的函数/方法中使用它来确定是来自浏览器还是 ajax 调用
requested_html = re.search(r'^text/html', request.META.get('HTTP_ACCEPT'))
if requested_html:
# requested from browser, do as per your wish
# ajax call. Returning as per wish
return JsonResponse({
'detail': _('Requested API URL not found')
}, status=404, safe=False)
说明
如果您请求从浏览器加载页面,您会在该请求的请求标头下的网络选项卡中看到,text/html 位于 requested headers 的开头。
但是,如果您从浏览器进行 ajax 调用,requested headers 的开头有 */*。如果你附上
Accept: application/json
在标头中,然后请求的标头变成这个
由此,您可以了解这些情况下接受标头的不同之处。