【问题标题】:Why can't Django sites be embedded inside another HTML(iframe)?为什么 Django 站点不能嵌入到另一个 HTML(iframe) 中?
【发布时间】:2018-02-15 06:03:36
【问题描述】:

我尝试在另一个 html 页面中嵌入一个 django 表单,但它不起作用。我尝试了我的其他 django 网站。但没有任何效果。还测试了其他一些站点。 django 是否限制在 iframe 中使用?如何让它发挥作用? 需要嵌入的表单Programming competition form

模板:

<form method="post">
  {% csrf_token %}
  <b>{{form.as_p}}</b>
  <input type="submit" value="Submit" title="Submit" />
</form>

尝试嵌入为:

<html>
<iframe frameborder="1" src="http://form.classof20.cf/Programming_Competition/"></iframe>
</html>

它有一个边框,里面什么都没有。

【问题讨论】:

  • 也许其他网站不想被嵌入。如果它不是您的网站,您将无法控制它的行为方式。
  • 您应该展示您创建的给您带来麻烦的代码。我们无法猜测出了什么问题。
  • 给我们足够的时间来尝试重现问题。
  • 嵌入与 django 无关...它只是 html ...
  • @tadman 只是创建一个空的 django 项目,添加他的视图代码,使用他的 HTML 嵌入它:你会得到同样的错误。也就是说,直接使用 URL 确实更容易回答问题,这个工作 URL 只是 OP 的一个奖励点。但我确实明白你的意思,下次我看到一个不独立的问题时会考虑一下(这里不是这种情况,如图所示)。

标签: python html django iframe


【解决方案1】:

这是尝试加载 HTML 后 webkit 检查器中的错误:

Refused to display 'http://form.classof20.cf/Programming_Competition/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
Failed to load resource: net::ERR_BLOCKED_BY_RESPONSE

事实上,这是 curl 的响应标头转储:

$ curl -I http://form.classof20.cf/Programming_Competition/

HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Wed, 06 Sep 2017 19:44:16 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 765
Connection: keep-alive
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Set-Cookie: csrftoken=UJZltdTzJMe6961QMNRSgZ7vKWa1vUEf2lEB8lmaaZXgROf1zyALsuwsKpvtcby6; expires=Wed, 05-Sep-2018 19:44:16 GMT; Max-Age=31449600; Path=/

那么,它是从哪里来的呢?来自Django clickjacking protection

解决方案0:确保你的django回复allows your other site in X-Frame-Options,即:

X-Frame-Options: ALLOW-FROM http://your-other-site-which-embeds/

解决方案 1:使您的表单视图免受点击劫持保护:

在使用中间件时,可能会有一些你不知道的视图 想要设置 X-Frame-Options 标头。对于这些情况,您可以使用 告诉中间件不要设置标题的视图装饰器:

from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_exempt

@xframe_options_exempt
def ok_to_load_in_a_frame(request):
    return HttpResponse("This page is safe to load in a frame on any site.")

【讨论】:

  • 谢谢!它有效,这与 Django.. :)
猜你喜欢
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多