Jquery .load()在Django模板中无法正常工作

4
我希望能在模板中渲染一个HTML "a"文件,并使用jQuery .load()嵌入其他HTML文件到这个a.html文件中。但是,我使用下面的代码失败了。
以下是我的a.html内容:
<html>
 <head>
  {% load staticfiles %}
   <script type="text/javascript" src="{% static "js/jquery-1.10.2.js" %}" />
   <script>
   $(function(){
     $("#includeContent").load("abc.html");
   });
   </script>
 </head>
 <body> 
   <div id="includeContent"></div>  
 </body>
</html>

以下是我的 abc.html 文件:
<html>
<body>
<!-- Hello -->
 <p>Hello world </p>
</body>
</html>

以下是我的应用程序树:
- App:
  views.py
  models.py
  - static
    -js:
     jquery-1.10.2.js
  - template:
    a.html
    abc.html

在Firebug调试器中,我可以看到jquery-1.10.2.js的源代码,因此我认为已成功包含了jquery脚本。
我想将嵌入a.html中的abc.html显示为“Hello world”,但在加载a.html后我什么也看不到。
有没有办法解决这个问题?
添加“模板”的设置:
TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},

]

2个回答

7
Django工作在服务器端,它根据请求准备响应。jQuery则在客户端工作。所有jQuery操作都发生在用户的浏览器上,而load只是简单地向Django发出另一个请求。但是,由于经过适当配置的服务器(希望出于安全考虑)不允许用户浏览器访问任何项目文件,因此jQuery无法以任何方式访问Django文件。
因此,在您的代码中,jQuery将请求特定的URLabc.html,因此您需要在urls.py中相应地定义一个URL,或者重新思考您的设计。

感谢您指出服务器端和客户端的区别。我认为在我的情况下,jQuery将向abc.html发出请求而不是a.html? - Chang May
1
在 urls.py 中,我添加了 url(r'^app/abc/', 'app.views.abc') 到 urlpatterns。并且我在 views.py 中定义了一个函数来渲染这个特定请求到 templates/abc.html 下的 abc.html。看起来它仍然没有工作... - Chang May
1
是的,它将向 abc.html 发送请求。请检查您的代码,因为可能存在一些错误,这是一般的想法。 - Wtower

-3

我不确定这种方式是否正确,但是我们可以从静态文件中加载HTML。创建一个名为“folder_name”的文件夹,路径为“/static/folder/name.html”。

$('.modal-body').load(
   '/static/pages/sample.html')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接