По тегам и коду вашего шаблона я понял, что вы используете Django. Чтобы понять вашу проблему, вам нужно понять, как представления Django работают по отношению к вашему браузеру, и что происходит, когда ваш браузер выдает запрос на определенный URL.
Что происходит на стороне Django
:
Что происходит, когда вы запрашиваете URL-адрес, так это то, что ваш базовый файл urls.py
будет искать шаблон, соответствующий вашему URL-адресу. Если шаблон встречается, то будет вызван соответствующий view
.
view
выполнит свою логику и будет использовать template
для преобразования своего ответа в html
.
Что происходит с точки зрения вашего браузера
Браузер запросил URL и получил ответ, он не знает о том, что было вызвано представление, и что он где-то извлек шаблон.
Что это значит для вас
Тот факт, что ваш search.js
файл расположен рядом с вашим шаблоном, совершенно не имеет значения , так как ваш браузер никогда не запрашивал какой-либо файл из этого каталога , это view
, который сделал, когда он получил его template
.
На самом деле, запрос вашего браузера на search.js
будет переадресован на Django
вашим веб-сервером и, скорее всего, приведет к ошибке 404
, если search.js
не преобразуется в представление в urls.py
.
Как вы можете использовать это для решения вашей проблемы
Вам нужно будет подать файл search.js
из каталога, к которому может получить доступ браузер. Обычно это делается в три этапа:
Сконфигурируйте ваш веб-сервер так, чтобы он самостоятельно обслуживал любой путь, начинающийся с /static/
(каким-то образом это означает, что запрос не переадресовывается на Django
).
В Apache вы бы использовали следующее правило: Alias /static/ /YOUR/STATIC/DIRECTORY/
Настройте Django
settings.py
для использования /YOUR/STATIC/DIR
в качестве STATIC_ROOT
и /static/
в качестве STATIC_URL
.
Поместите файл search.js
в свой /YOUR/STATIC/DIR/
Используйте src="/static/search.js
для ссылки на ваш файл в шаблоне html
.
И последнее: если вы используете сервер разработки, вам может потребоваться, чтобы ваш STATIC_URL
начинался с полного пути к вашему серверу, включая порт. (Или у вас могут быть проблемы с политиками безопасности браузера).
Несколько дополнений:
Вы должны использовать теги шаблона, чтобы вам не приходилось писать /static/
в вашем шаблоне.
Вы должны использовать manage.py collectstatic
для автоматического размещения статических файлов в вашем статическом каталоге.
Самое главное, Вы должны исследовать, что модель Django MVC (или MTV) имеет отношение к .