Estoy trabajando en un proyecto Django (Django 1.11), y estoy tratando de usar un archivo estático.
Esta es mi estructura de proyecto:

|project_name
|---- app_name
|-------- src
|------------ static
|---------------- css
|-------------------- bootstrap
|------------------------ bootstrap.min.css
|-------- templates
|------------ base.html
|------------ first_template.html
|-------- views
|------------ first_view.py
|---- project_name
|-------- settings.py

En el archivo settings.py, tengo django.contrib.staticfiles en INSTALLED_APPS y configuro la variable STATIC_URL de la siguiente manera:

STATIC_URL = '/src/static/'

Entonces, me gustaría usar archivos estáticos en la plantilla base, y esto es lo que he hecho:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    <link href="{% static "css/bootstrap/bootstrap.min.css" %}" rel="stylesheet">
</head>
<body>
    {% block content %}{% endblock content %}
</body>
</html>

Cuando cargo first_template.html , y también el archivo base.html , no se encuentra el archivo bootstrap.min.css (404).

Sé que es una pregunta trivial, pero realmente no entiendo lo que me estoy perdiendo. He comprobado muchas preguntas SO similares sin éxito, también porque la mayoría de ellas se refieren a versiones antiguas de django
Gracias de antemano

3
Giordano 28 oct. 2017 a las 10:02

4 respuestas

La mejor respuesta

Dado que está utilizando una ruta personalizada, ¿por qué no le dice al django dónde encontrarla? Use esto en la configuración y funcionará bien.

Opción 1:

En caso de que te tomes en serio la preservación de la estructura de tu archivo

#settings.py
STATICFILES_DIRS = (
    ...
    os.path.join(BASE_DIR, 'app/src/static') # build appropriate path
)

ACTUALIZACIÓN:

Opcion 2:

Mueva la carpeta estática a donde existe manage.py o al elemento secundario de la aplicación.

Ejemplo:

...manage.py
...static
...app/

O

...manage.py
...app/static
2
rrmerugu 28 oct. 2017 a las 07:18

Dentro de la carpeta estática, debe crear una carpeta con el nombre de la aplicación

Ahora su estructura de carpetas es

   |-------- src
    |------------ static
    |---------------- css
    |-------------------- bootstrap
    |------------------------ bootstrap.min.css

Cámbielo a

|-------- src
|------------ static
|-------------------app_name
|--------------------------- css
|-------------------- ----------bootstrap
|---------------------------------------- bootstrap.min.css
0
Sandeep Lade 28 oct. 2017 a las 07:10

Añadir

STATICFILES_DIRS=(os.path.join(BASE_DIR, '../frontend'),)

O

STATICFILES_DIRS=()

En tu configuración. Entonces debería funcionar. Me llevó mucho tiempo encontrar esto.

0
Nikolaus Pluta 22 abr. 2018 a las 13:28

STATIC_URL solo controla el prefijo de la URL de los archivos estáticos (es decir, la dirección web). No controla su ubicación física en el disco.

Mueva sus archivos estáticos de app_name/src/static/ a app_name/static/ y eso debería solucionarlo

Editar: si desea mantener la estructura del directorio como está, tiene un par de opciones

  1. Agregue manualmente sus directorios de archivos estáticos a STATICFILES_DIRS
  2. Cree una clase que herede de django.contrib.staticfiles.finders.AppDirectoriesFinder y establezca el atributo source_dir

from django.contrib.staticfiles.finders import AppDirectoriesFinder class MyAppDirFinder(AppDirectoriesFinder): source_dir = "src/static"

Luego puedes agregar tu clase a STATICFILES_FINDERS

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

]

Referencia: https://docs.djangoproject.com/en/1.11 / ref / settings / # static-files

1
Ramast 28 oct. 2017 a las 08:25