【问题标题】:How to use iframe in Django for Production?如何在 Django 中使用 iframe 进行生产?
【发布时间】:2017-06-13 00:30:19
【问题描述】:

自 2005 年以来,我一直在使用 WordPress,现在正在将我的所有网站切换到 Django 项目。这是我的第一个 Django 项目,它将有多个 Web 应用程序。

我正在使用 Visual Studio Preview 2017 创建我的 Django 项目。 在我的项目中,我设置了一个主 Web 应用程序,其中包含项目 urls.py、view.py、model.py 和包含主要 html 页面的模板文件夹。此主 Web 应用程序将连接到项目中的其他 Web 应用程序。

我知道网络应用程序开发的目标是让人们继续使用网络应用程序。话虽如此,我需要将博客和附属页面添加到我的项目中。我知道如何做到这一点的唯一方法是 iframe。

我在这个网站上找到了一个选项,但除了添加 | 之外没有任何意义安全的网址。 [1]:generate iframe from django tag

我查看了上面的链接以及我是否需要在我的项目 Web 应用程序的代码中使用序列化程序的问题?

我的代码是:

Affi 网络应用程序

web_host_python.html

     <html>
<head><title>Web Host Python Hosting</title></head>

<body>

{{ whpaff.html | safe }}

</body>
</html>

whpaff.html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <iframe src=" https://www.webhostpython.com/billing/aff.php?aff=69" 
                  style="border:0px #ffffff none;" name="web_host_python" 
                  scrolling="no" frameborder="1" marginheight="0px" 
                  marginwidth="0px" 
                  height="100%" width="100%" allowfullscreen></iframe>
</body>
</html>

urls_affi.py

from django.conf.urls import url
from . import views

urlpattens = [
    url(r'^$', views.home),
    ]

view_affi.py

from django.shortcuts import render, HttpResponse

# Create your views here.
def web_host_python(request):
    return render(request, 'affi/web_host_python.html')

项目主应用

url.py

   """
Definition of urls for affiliate_sites.
"""

from datetime import datetime
from django.conf.urls import url
import django.contrib.auth.views

import app.forms
import app.views

# Uncomment the next lines to enable the admin:
# from django.conf.urls import include
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = [
    # Examples:
    url(r'^affi$', views_affi.web_host_python, name='web_host_python),
    url(r'^$', app.views.home, name='home'),
    url(r'^contact$', app.views.contact, name='contact'),
    url(r'^about', app.views.about, name='about'),
    url(r'^login/$',
        django.contrib.auth.views.login,
        {
            'template_name': 'app/login.html',
            'authentication_form': app.forms.BootstrapAuthenticationForm,
            'extra_context':
            {
                'title': 'Log in',
                'year': datetime.now().year,
            }
        },
        name='login'),
    url(r'^logout$',
        django.contrib.auth.views.logout,
        {
            'next_page': '/',
        },
        name='logout'),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),

view.py

   """
Definition of views.
"""

from django.shortcuts import render
from django.http import HttpRequest
from django.template import RequestContext
from datetime import datetime

def web_host_python(request):
    """Renders the home page."""
    assert isinstance(request, HttpRequest)
    return render(
        request,
        'affi/web_host_python.html'
        {
            'title':'affi/web_host_python.html',
            'year':datetime.now().year,
        }
    )

def home(request):
    """Renders the home page."""
    assert isinstance(request, HttpRequest)
    return render(
        request,
        'app/index.html',
        {
            'title':'Home Page',
            'year':datetime.now().year,
        }
    )

def contact(request):
    """Renders the contact page."""
    assert isinstance(request, HttpRequest)
    return render(
        request,
        'app/contact.html',
        {
            'title':'Contact',
            'message':'Your contact page.',
            'year':datetime.now().year,
        }
    )

def about(request):
    """Renders the about page."""
    assert isinstance(request, HttpRequest)
    return render(
        request,
        'app/about.html',
        {
            'title':'About',
            'message':'Your application description page.',
            'year':datetime.now().year,
        }
    )

我所做的是否正确?

或者有没有其他更简单的方法在 Django 中执行 iframe?

感谢您的所有建议。

马库斯

【问题讨论】:

    标签: python django iframe


    【解决方案1】:

    我认为您的代码没有按照您的想法执行。 {{ whpaff.html | safe }} 将在调用render() 函数时查找名为whpaff 的参数以传递到模板中,然后将该参数中的html 属性的值嵌入到生成的输出中。您正在将 titlemessageyear 等其他参数传递给您的某些 render() 函数,但我没有看到您正在传递 whpaff 参数的任何地方。我认为您打算让它神奇地加载文件“whpaff.html”并将该文件的内容嵌入到您的输出中,但这不是 {{ }} 块在 Django 模板中的工作方式。

    另一方面,&lt;iframe&gt; 是一个 HTML 标记,可让您在页面中显示来自其他 URL 的内容。 Django 与&lt;iframe&gt; 没有直接关系。您可以像任何其他 HTML 标记一样在 Django 模板中包含 &lt;iframe&gt; 标记,或者您可以使用引用由 Django 生成的 URL 的 &lt;iframe&gt; 标记,但 Django 不会知道或关心 @987654337 @ 在任一情况下。

    【讨论】:

    • 我在另一个 Stackoverflow 链接中看到我在它谈到使用的代码之前引用了 |在 Django for iframe 中是安全的。这是链接stackoverflow.com/questions/43432537/… 但这是 url.py 和 view.py 的单独部分我也知道 iframe 是一个 html 标签,但它必须通过 Django 进行通信。您能否查看上面的链接并告诉我如何对我正在做的事情执行此操作。此外,它还显示了序列化程序可用于我正在尝试做的事情。
    • safe 过滤器告诉 Django 模板系统不要转义它可能在嵌入的值中找到的任何 HTML 代码。当您信任数据源时使用它。否则 Django 模板假定所有嵌入的数据都是潜在的风险,它会阻止标签等可能用于 HTML 注入攻击的标签。 stackoverflow.com/questions/4056883/…
    【解决方案2】:

    您可以尝试像这样将 iframe 标记添加到您的 html 中,而不是加载 iframe 的 html 内容。例如:

    <body>
      <iframe src="https://www.mxysite.com" frameborder="0"></iframe>
    </body>
    

    除非我误解了你的部分问题?

    【讨论】:

    • 大卫,你说的是 whpaff.html 文件吗?有了这段代码,它会做整个页面吗?马库斯
    猜你喜欢
    • 2021-11-20
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2017-01-12
    • 2021-08-09
    • 2021-03-22
    相关资源
    最近更新 更多