在django中使用js文件中的相对路径提供图像

时间:2014-02-25 06:54:44

标签: django

背景

我的setting.py

STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    ('assets/css','/var/www/mongo_conprima/static_files/css/'),
    ('assets/js','/var/www/mongo_conprima/static_files/js/') )
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    #'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

我能够以这种方式在模板中提供静态文件

<script src="{% static "assets/SlickGrid-master/lib/firebugx.js" %}"></script>

问题: 我的js文件中有图像,相对路径无法像这样加载

/var/www/mongo_conprima/static_files/SlickGrid-master/slick.formatters.js:
   55  
   56    function CheckmarkFormatter(row, cell, value, columnDef, dataContext) {
   57:     return value ? "<img src='/images/tick.png'>" : "";
   58    }
   59  })(jQuery);

错误: 我在控制台中遇到以下错误

GET http://127.0.0.1:8000/images/tick.png 404 (NOT FOUND) slick.grid.js:2567

3 个答案:

答案 0 :(得分:1)

您可以在模板中使用全局变量并在js文件中使用它

<强>模板:

<html>
<script>
   var GLOBAL_PATH = '{{ STATIC_PATH }}'; 
</script>
</html>

<强> JS:

return value ? "<img src='" + GLOBAL_PATH + "/tick.png'>";

答案 1 :(得分:0)

使用函数内部的静态标记,因此javascript应该看起来像

function CheckmarkFormatter(row, cell, value, columnDef, dataContext) {
    return value ? "<img src='{% static "/images/tick.png" %}'>" : "";
}

静态标记将为您提供完整的静态文件路径。

答案 2 :(得分:0)

以下问题回答了针对此问题的几个解决方案:https://stackoverflow.com/a/6574670/2487431

您可以向网络服务器添加配置,将无形中的路径重定向到正确的静态路径,也可以使用urls.py添加重定向。

该链接深入介绍了如何执行此操作。希望这可以帮助将来的某个人。