I was making one webapp in django. I try to deployed it on pythonanywhere everything was going fine but in last when i tried to collect static files using python manage.py collectstatic it is giving me this error:

return database_name == ':memory:' or 'mode=memory' in database_name
TypeError: argument of type 'PosixPath' is not iterable

suggest some idea how can I solve it.

Here is my setting.py file

import os
from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '!25%rdt-$_$bsc*fl)e7x2*x6awjca^3_2t-k@l0tu*8k!f33&'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

ALLOWED_HOSTS = ['*']


# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR / 'static/')
4

There are 4 best solutions below

0
On

Maybe you have a typo, instead ',' used '/'. STATIC_ROOT = os.path.join(BASE_DIR, 'static')

2
On

If you are using Django v3.1 then you can try placing str() around the database path in the settings.py file. This is because SQLite only accepts strings and Django v3.1 settings.py returns a pathlib.Path object.

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / 'db.sqlite3'),
    }
}

I had the same problem and found the answer here: https://forum.djangoproject.com/t/django-tutorial-python-manage-py-startapp-polls-fails/2718

0
On

#in settings.py do

# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / 'db.sqlite3'),
    }
}

Here is the issue:

BASE_DIR = Path(__file__).resolve().parent.parent

Both type(BASE_DIR) and type(BASE_DIR / 'db.sqlite3') are <class 'pathlib.PosixPath'>

0
On

I had the same problem when using the latest Django v3.1
I got this issue because I forgot to activate the virtual environment