在 Django 的 views.py 中将 content_type 添加到 render_to_response 导致 'Server Error (500)'
Adding content_type to render_to_response in Django's views.py causing 'Server Error (500)'
在 django 1.11 中,在 views.py 我使用 render_to_response 函数如下:
return render_to_response(domainObject.template_path, context_dict, context)
这很好用。现在我试图将此响应的 content_type 指定为 'txt/html'。所以我切换到
content_type = 'txt/html'
return render_to_response(domainObject.template_path, context_dict, context, content_type)
但是有了这个设置,服务器 returns 一个
Server Error (500)
按照 https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#render-to-response 的文档,我认为我以正确的顺序提供了变量...
这里是完整的 'def' 块供参考:
def myview(request):
context = RequestContext(request)
if request.homepage:
migrationObject = calltomigration()
else:
integrationObject = Integration.objects.filter(subdomain_slug=request.subdomain).get()
except ObjectDoesNotExist:
logger.warning(ObjectDoesNotExist)
raise Http404
sectionContent = None
if not request.homepage:
sectionContent = getLeafpageSectionContent(referenceObject)
context_dict = {
'reference': referenceObject,
'sectionContent': sectionContent,
'is_homepage': request.homepage
}
# content_type = 'txt/html'
return render_to_response(domainObject.template_path, context_dict, context)
这是 NGINX 状态:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-01-17 16:34:15 UTC; 40s ago
Docs: man:nginx(8)
Process: 14517 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=2)
Process: 14558 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 14546 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 14562 (nginx)
Tasks: 2 (limit: 1152)
CGroup: /system.slice/nginx.service
├─14562 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─14564 nginx: worker process
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: nginx.service: Failed with result 'timeout'.
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: Stopped A high performance web server and a reverse proxy server.
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: Starting A high performance web server and a reverse proxy server...
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: Started A high performance web server and a reverse proxy server.
[1]+ Done sudo systemctl restart nginx ```
标准 Django 快捷方式函数“render”提供与“render_on_response”相同的功能。
Django 的 'render_to_reponse' 函数在 2.2 中被贬值,在 3.0 中正式从 Django 中移除。您可以在此处查看发行说明:
https://docs.djangoproject.com/en/3.0/releases/3.0/
查看下面渲染功能的官方文档,
https://docs.djangoproject.com/en/3.0/topics/http/shortcuts/
此外,context_type 应该是 'text/html' 而不是 'txt/html'。
今天我解决了这个问题。我发现在 render_to_response 中,必须在第三个位置指定 MIME 类型(至少在我正在处理的设置中)。大多数 OS/browser 组合找出了错误格式的 MIME 类型,但 PC 上的 Edge 除外。现已修复!
在 django 1.11 中,在 views.py 我使用 render_to_response 函数如下:
return render_to_response(domainObject.template_path, context_dict, context)
这很好用。现在我试图将此响应的 content_type 指定为 'txt/html'。所以我切换到
content_type = 'txt/html'
return render_to_response(domainObject.template_path, context_dict, context, content_type)
但是有了这个设置,服务器 returns 一个
Server Error (500)
按照 https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#render-to-response 的文档,我认为我以正确的顺序提供了变量...
这里是完整的 'def' 块供参考:
def myview(request):
context = RequestContext(request)
if request.homepage:
migrationObject = calltomigration()
else:
integrationObject = Integration.objects.filter(subdomain_slug=request.subdomain).get()
except ObjectDoesNotExist:
logger.warning(ObjectDoesNotExist)
raise Http404
sectionContent = None
if not request.homepage:
sectionContent = getLeafpageSectionContent(referenceObject)
context_dict = {
'reference': referenceObject,
'sectionContent': sectionContent,
'is_homepage': request.homepage
}
# content_type = 'txt/html'
return render_to_response(domainObject.template_path, context_dict, context)
这是 NGINX 状态:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-01-17 16:34:15 UTC; 40s ago
Docs: man:nginx(8)
Process: 14517 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=2)
Process: 14558 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 14546 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 14562 (nginx)
Tasks: 2 (limit: 1152)
CGroup: /system.slice/nginx.service
├─14562 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─14564 nginx: worker process
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: nginx.service: Failed with result 'timeout'.
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: Stopped A high performance web server and a reverse proxy server.
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: Starting A high performance web server and a reverse proxy server...
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Jan 17 16:34:15 ip-172-31-8-232 systemd[1]: Started A high performance web server and a reverse proxy server.
[1]+ Done sudo systemctl restart nginx ```
标准 Django 快捷方式函数“render”提供与“render_on_response”相同的功能。
Django 的 'render_to_reponse' 函数在 2.2 中被贬值,在 3.0 中正式从 Django 中移除。您可以在此处查看发行说明:
https://docs.djangoproject.com/en/3.0/releases/3.0/
查看下面渲染功能的官方文档,
https://docs.djangoproject.com/en/3.0/topics/http/shortcuts/
此外,context_type 应该是 'text/html' 而不是 'txt/html'。
今天我解决了这个问题。我发现在 render_to_response 中,必须在第三个位置指定 MIME 类型(至少在我正在处理的设置中)。大多数 OS/browser 组合找出了错误格式的 MIME 类型,但 PC 上的 Edge 除外。现已修复!