来自 js 静态文件的事件侦听器指向 Django 中的错误路径

安东尼奥

这是我第一次尝试在 Django 中集成前端和后端。我目前有以下文件结构:

my_project
 | 
 +-- my_app
 |  |  
 |  +-- ...
 |  +-- static
 |  |  |
 |  |  +--my_app
 |  |  |  +--app.js
 |  |  |  +--style.css
 |  |  |  +--back.png
 |  |  |  +--dice-1.png
 |  |  |  +--dice-2.png
 |  |  |  +--dice-3.png
 |  |  |  +--dice-4.png
 |  |  |  +--dice-5.png
 |  |  |  +--dice-6.png
 |  +-- templates
 |  |  |
 |  |  +--my_app
 |  |  |  +--index.html
 |  |  
 +-- manage.py

问题是我来自 my_app/static 的 css 文件加载得很好 - 包括页面上的初始图像文件,但是当我尝试在 app.js 文件上执行单​​击事件以从静态文件夹加载图像时,我得到控制台上的错误:

GET http://localhost:8000/js_dom/dice-1.png 404 (Not Found)

从我的 js 文件:

    // setter: change dice img
    var diceDOM = document.querySelector('.dice');  // select dice DOM
    diceDOM.src = `dice-${dice}.png`;  // use correct png based on roll <-- this is where I am getting the error
});

初始图像从我的 html 文件加载:

<img src="{% static 'js_dom/dice-5.png' %}" alt="Dice" class="dice"> 

它加载的路径是:

http://localhost:8000/static/js_dom/dice-5.png

这与我从引发错误的控制台获得的信息非常不同。

我确保从 settings.py 加载所有静态文件:

STATIC_URL = '/static/'

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

这是项目的 urls.py:

from django.contrib import admin
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('js_dom/', include('js_dom.urls'))
]

这是应用程序的 urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.js_dom)
] 

有没有办法配置点击指向的位置?(/static/js_dom/ 而不是 /js_dom/)

雷利斯卡诺

好吧,您似乎知道您的问题是由于没有正确引用图像路径。

当你这样做时:

diceDOM.src = `dice-${dice}.png`;

您实际上是将其添加dice-1.png为当前 URL 的相对路径。因此,例如,如果您拥有127.0.0.1:8000/some/path,那么您现在将拥有127.0.0.1:8000/some/path/dice-1.png

有两种方法可以获得图像的实际路径:

  1. 硬编码路径
diceDOM.src = `/static/js_dom/dice-${dice}.png`;
  1. 渲染模板时将图像路径保存为 js 变量。

因此,在您的HTML 文件中,您将拥有(假设您将骰子编号作为dice上下文数据中字符串变量传递):

<script type="text/javascript">
    var image_src = "{% static 'inventario/img/dice-'|add:number|add:'.png' %}";
</script>

然后,在您的 js 文件中,您可以拥有:

diceDOM.src = image_src;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何防止来自 Vue Js 组件中的事件侦听器的多次调用?

Django中的静态文件收集路径错误

数组节点js中数据更改的事件侦听器

来自事件侦听器的 Python 锁定

来自节点js服务器的错误,但未指向任何特定文件

来自npm-run-build前端的Django中的静态文件抛出错误404

如何在动态字符串的反应js中事件侦听器或单击侦听器?

如何在node.js事件侦听器中获取事件名称?

是否可以将事件侦听器绑定到来自外部脚本的影子dom中的元素?

如何在 Scala.js 中的单击事件侦听器中检索标签名称?

来自Django测试的404错误?

如何/何时将事件侦听器附加到d3.js中?

如何将事件侦听器添加到tone.js中播放的音符

如何在d3.js中自定义事件侦听器?

是否可以从Vue.js 2中的组件访问事件侦听器

如何使用Vanilla JS在事件侦听器中禁用preventDefault

如何获取表单提交事件侦听器以在JS中工作?

fullpage.js无法阻止被动事件侦听器中的Default

在 Three.js 中为 3D 对象的特定部分添加事件侦听器

在JS中创建元素时内联添加事件侦听器是不好的做法吗?

将事件侦听器添加到js中的多个选择元素

Django 在 css 文件中的 url() 上寻找错误的路径

来自 Firebase 事件侦听器的 Java 异步更新

在脚本标签vue2中侦听来自js代码的自定义事件

与浏览器 Javascript 的事件侦听器相比,事件包如何在 node.js 中工作

事件侦听器和转换 JS

无法在 django admin 中打开来自 cloudinary 的原始文件

ImageField 不接受来自 DJANGO 中 html 文件的值

NODE.JS:当表单提交出现后端错误时,如何使用前端 JS 事件侦听器?