Django: Как настроить статические параметры для jQuery-Raty?

Я пытаюсь заставить jquery.raty работать с Django. У меня отлично настроено обслуживание статических файлов, однако, похоже, у него проблема с поиском файлов рейтинговых изображений.

Вот как я это настроил:

base.html (статическая загрузка здесь подходит)

<script src="{{ STATIC_URL }}raty/js/jquery.raty.min.js"></script>

шаблон:

<div id="star"></div>

JS

$('#star').raty({
      cancel    : true,
      cancelOff : 'cancel-off-big.png',
      cancelOn  : 'cancel-on-big.png',
      half      : true,
      size      : 24,
      starHalf  : 'star-half-big.png',
      starOff   : 'star-off-big.png',
      starOn    : 'star-on-big.png'
    });

но вместо звездочек я вижу альтернативные текстовые числа:

введите здесь описание изображения

И это сообщение, которое я получаю от сервера при обновлении страницы:

[07/Oct/2012 21:03:48] "GET /contact/add/img/star-off-big.png HTTP/1.1" 200 9941

Я не понимаю, почему он смотрит на текущее местоположение (http://127.0.0.1:8000/contact/add/) и добавляет /img/xxx.png к /contact/add/.

Как установить путь к изображениям в javascript, используя путь STATIC_URL?

Был бы очень признателен за вашу помощь в этом.


person Houman    schedule 07.10.2012    source источник


Ответы (2)


По умолчанию path Raty — «img». Попробуйте передать path как абсолютный URL:

$('#star').raty({
    cancel    : true,
    cancelOff : 'cancel-off-big.png',
    cancelOn  : 'cancel-on-big.png',
    half      : true,
    size      : 24,
    starHalf  : '../raty/img/star-half-big.png',
    starOff   : 'star-off-big.png',
    starOn    : 'star-on-big.png',
    path      : '{{ STATIC_URL }}img' // <-- or wherever your raty images are
});

Изменить:

Один из способов использования переменных "пространства имен" jQuery для использования STATIC_URL в других внешних файлах javascript. Это будет определено в <head> вашего шаблона, после включения jQuery, но до любых скриптов, которые используют определенную переменную.

<script type="text/javascript">  
    $.myproject = {} // namespace
    $.myproject.STATIC_URL = '{{ STATIC_URL }}';
</script>

Затем другие ваши сценарии могут использовать $.myproject.STATIC_URL, когда требуется абсолютный URL-адрес статических ресурсов.

person Micah Carrick    schedule 07.10.2012
comment
Спасибо Миха за ваш ответ. Я просто попробовал это без везения. Вы уверены, что {{ STATIC_URL }}, который идеально переводится в правильный URL-адрес в base.html, также принимается в myApp.js? Я не уверен, так как фреймворк Django должен преобразовать это, и я не уверен, возможно ли это в javascript. - person Houman; 08.10.2012
comment
О, я думал, что JS прямо в вашем шаблоне. Нет, это не будет работать в myApp.js (поскольку я предполагаю, что это статический контент). Вы можете попробовать жестко запрограммировать его там, чтобы убедиться, что это действительно проблема. У меня часто есть раздел JS в заголовке моего шаблона Django (например, base.html), который определяет глобальные переменные или переменные пространства имен для путей, чтобы избежать жестко запрограммированных в JS абсолютных URL-адресов. - person Micah Carrick; 08.10.2012
comment
Ах, это звучит разумно. Не могли бы вы привести пример того, как вы используете VAR глобального пространства имен, чтобы я мог получить к нему доступ позже в моем myApp.js? Спасибо - person Houman; 08.10.2012
comment
Отредактировал мой ответ с примером. - person Micah Carrick; 08.10.2012

Самый простой способ — установить путь глобально, если вы собираетесь использовать несколько рейтингов, чтобы вам не нужно было повторять везде.

<script type="text/javascript" src="{{ STATIC_URL }}raty/jquery.raty.min.js"></script>
<script type="text/javascript">
    $.fn.raty.defaults.path = '{{ STATIC_URL }}raty/img';
</script>
person Byteme    schedule 17.09.2013