django如何在模板中包含javascript

Posted

技术标签:

【中文标题】django如何在模板中包含javascript【英文标题】:django how to include javascript in template 【发布时间】:2015-07-30 13:18:29 【问题描述】:

我正在启动一个项目并遵循文档,但未能成功包含 javascript

这是我的设置:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

STATIC_ROOT = '/static/'

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)

所以我在我的项目中创建了一个带有 javascript 文件的静态文件夹。

myproject/static/app.js

我的 urls.py:

urlpatterns = [
    url(r'^$', 'app.views.home'),
    url(r'^admin/', include(admin.site.urls)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

在我的模板中: 这是我的项目/模板/base.html

<!DOCTYPE html>
<head>
  % load static %
  <script src="% static 'app.js' %"></script>   
  <title>Site</title>
</head>
<body>
<img src="% static 'img.png' %"  />
  % block content %% endblock %
</body>
</html>

我的另一个模板:

% block content %
    hello world
% endblock %

我有“hello world”

http://127.0.0.1:8000/

但我没有我的图像或脚本。

我尝试了很多不同的东西,但我从未成功

【问题讨论】:

在使用“静态”标签之前,请尝试使用完整的 url 获取文件(例如 /static/myproject/img.png)。这样你就可以通过 Django 找出你的文件所在的位置(有时会有点棘手)。 Django 文档提供了如何包含静态文件的指南,例如 JS docs.djangoproject.com/en/3.2/howto/static-files 【参考方案1】:

urls.py

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
]

settings.py

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

STATIC_URL = '/static/'

# remove STATIC_ROOT

base.html

您的标题标签没有关闭。

<!DOCTYPE html>
<head>
  % load static %
  <script src="% static 'app.js' %"></script>   
  <title>Site</title>
</head>
<body>
<img src="% static 'img.png' %"  />
  % block content %% endblock %
</body>
</html>

【讨论】:

它没有用。我仍然没有包含 javascript 文件 设置 STATICFILES_DIRS = () 和 STATIC_ROOT = os.path.join(BASE_DIR, 'static') 让我们continue this discussion in chat.【参考方案2】:

你的模板应该写成% load staticfiles % 而不是% load static %

来源: https://docs.djangoproject.com/en/1.8/howto/static-files/

此外,os.path.join(BASE_DIR, "static"), 仅在您的应用中查找静态文件,如 app/static/app/static.js。如果您有不属于任何特定应用程序而是属于项目的静态文件,则需要显式添加该文件夹。请参阅我提到的文档页面上“配置静态文件”的第 4 点。

【讨论】:

我先按照文档进行操作,但没有成功。我尝试加载静态和加载静态文件,但它没有工作【参考方案3】:

据我了解,STATICFILES_DIRS 应该在settings.py 中,并定义如下:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

请查看documentation。

【讨论】:

【参考方案4】:

我是编程新手,因此我的观点是有把握的。我去。也许你有更多的应用程序意味着你必须检查你的树,因为它应该按照 django 文档点的方式进行。 这意味着你应该有 your_app/static/your_app/ 在这里你必须再放三个对应于css、images和js的文件夹以及它们各自的文件。

另外请注意,您的静态 url 的命名应该与您的静态根目录不同。 完成此操作后,您必须告诉 django 在哪里可以找到每个应用程序的静态数据,因此您必须在 STATICFILES_DIRS 中声明它。

在这一切之后,你必须运行 collectstatic 命令。

我仍然缺少将每个应用程序的 js 文件连接到模板的部分..所以我无法进一步帮助你老兄....希望它有点帮助

【讨论】:

【参考方案5】:

在基目录中创建名为“static”的目录。即与项目目录处于相似级别。 然后在 settings.py 中添加以下内容

STATIC_URL = '/static/'
#setting for static files
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) code here

【讨论】:

以上是关于django如何在模板中包含javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何在通过 pip 安装的应用程序中包含 django 模板?

如何在单独的 js 文件中使用访问 django 模板变量,而不是在同一个 html 文件中包含小脚本块?

在我的 django 模板中包含 CSS 和 Javascript [重复]

在 django 模板中包含 javascript 的最佳实践

django是否在模板中包含静态文件?

渲染视图在模板中包含 django 位置字段