问题描述
我在Django中制作了一个webapp。我尝试将其部署在pythonanywhere上一切正常,但是最后,当我尝试使用python manage.py collectstatic
收集静态文件时,它给了我这个错误:
return database_name == ':memory:' or 'mode=memory' in database_name
TypeError: argument of type 'PosixPath' is not iterable
建议我如何解决。
这是我的setting.py文件
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/')
解决方法
如果您正在使用Django v3.1,则可以尝试在str()
文件中的数据库路径周围放置settings.py
。这是因为SQLite仅接受字符串,而Django v3.1 settings.py
返回一个pathlib.Path
对象。
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3','NAME': str(BASE_DIR / 'db.sqlite3'),}
}
我遇到了同样的问题,并在这里找到了答案: https://forum.djangoproject.com/t/django-tutorial-python-manage-py-startapp-polls-fails/2718
,也许您有错字,而不是用'/'代替。 STATIC_ROOT = os.path.join(BASE_DIR,'static')
,使用最新的Django v3.1时,我遇到了同样的问题。
我遇到了这个问题,因为我忘记激活虚拟环境