Django не находит статические js-скрипты в нужной папке - PullRequest
1 голос
/ 17 октября 2019

Я уже запустил collectstatic и создал статический каталог в своем urls.py, и все остальные статические файлы работают нормально (загрузчик, пользовательский CSS), а другие скрипты в этом же каталоге работают отлично.

Это код ошибки в консоли.

Failed to load resource: the server responded with a status of 404 (Not Found) ... jquery.formset.js:1

(http://localhost:8000/static/js/django-dynamic-formset/jquery.formset.js)

(index):86 Uncaught TypeError: $(...).formset is not a function
    at (index):86

Для второй ошибки я столкнулся с подобной проблемой раньше. Перемещение тегов jQuery CDN над самим сценарием решило проблему тогда, но сейчас это не работает.

Это мой корень urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('showroom/', include('showroom.urls')),
    path('', RedirectView.as_view(url='/showroom/', permanent=True)),       # Redirect homepage to showroom
    path('accounts/', include('allauth.urls')),                             
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py

# Static and media files
STATIC_URL = '/static/'
STATIC_ROOT = (
    os.path.join(BASE_DIR, 'static')
    )
MEDIA_URL = '/media/'
MEDIA_ROOT = (
    os.path.join(BASE_DIR, 'media')
)

Django html

{% block scripts %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>    
{% load static %}
    <script src="{% static '/js/django-dynamic-formset/jquery.formset.js' %}"></script>
{% endblock %}

Это фрагмент скрипта из отрисованного html

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 
<script src="/static/js/django-dynamic-formset/jquery.formset.js"></script> <script type="text/javascript">
        $('.formset_row-image_set').formset({
            addtext: 'add another',
            deleteText: 'remove',
            prefix: 'image_set',
        });
    </script> </body>

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

Если есть какой-то дополнительный контекст, просто дайте мне знать.

1 Ответ

1 голос
/ 17 октября 2019

Django обрабатывает static файлы по-своему, вам не нужно указывать полный путь к папке. Попробуйте заменить на эту строку:

<script src="{% static 'js/django-dynamic-formset/jquery.formset.js' %}"></script>

и убедитесь, что вы добавили в начало вашего файла {% load static %}

Согласно документации: https://docs.djangoproject.com/en/2.2/howto/static-files/#configuring-static-files

...