Обслуживание stati c файлов из каталога root в Django - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть файлы уровня приложения c и я хочу обслуживать глобальные файлы c, такие как JQuery, структура моего проекта выглядит следующим образом:

mysite
├───dashboard
│   ├───migrations
│   ├───static
│   │   └───dashboard
│   │       ├───css
│   │       ├───img
│   │       └───js
│   └───templates
│       └───dashboard
├───etc
├───static
│   └───js
|       └───jquery.min.js
└───mysite

Я добавил следующие django документов, так что settings.py выглядит

STATIC_ROOT = ""

STATIC_URL = '/static/'

STATICFILES_DIR = [
    os.path.join(BASE_DIR, "static"),
    os.path.join("static"),
]

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

мой urls.py выглядит так

urlpatterns = [
    path('admin/', admin.site.urls),
    path("", include(dashboard.urls)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

мой INSTALLED_APPS выглядит следующим образом

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "dashboard",
]

, когда Я пытаюсь получить доступ к нему из шаблона, он возвращает код ответа 404 в журнале сервера запуска,

[09/Apr/2020 01:59:34] "GET /static/js/jquery.min.js HTTP/1.1" 404 1674

тег шаблона выглядит так

{% load static %}
<script src="{% static 'js/jquery.min.js' %}"></script>

Это мой первый Django Проект без следования учебнику, и любая помощь будет принята с благодарностью. Спасибо

РЕДАКТИРОВАТЬ: мне удалось решить проблему, удалив STATIC_ROOT параметр

1 Ответ

0 голосов
/ 09 апреля 2020

Вам необходимо указать префикс перед одним из двух каталогов с именем static, потому что Django будет использовать первый файл stati c, который он находит, чье имя соответствует, и если у вас был файл stati c с тем же именем в другом приложении, Django не сможет различить guish между ними. Мы должны быть в состоянии указать Django на правильный, и лучший способ убедиться в этом - namespacing. То есть, помещая эти stati c файлы в другой каталог, названный для самого приложения.

Пространство имен stati c assets в STATICFILES_DIRS можно указать, указав prefixes . Например:

STATICFILES_DIR = [
    ("main", os.path.join(BASE_DIR, "static")),
    os.path.join("static"),
]

, а затем:

<script src="{% static 'main/js/jquery.min.js' %}"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...