

**前提・実現したいこと**  
コマンドプロンプトを使用してローカルにあるPythonのDjangoで作成したwebアプリファイルをリモートサーバに転送すると転送先のURLで下記のようなエラーがでてしまいます。

**発生している問題・エラーメッセージ**

[code]

    Template error:
    In template /URL/polls/index.html, error at line 1
       argument 1 must be str, not PosixPath
       1 :  {% if latest_question_list %} 
       2 :     <ul>
       3 :     {% for question in latest_question_list %}
       4 :         <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
       5 :     {% endfor %}
       6 :     </ul>
       7 : {% else %}
       8 :     <p>No polls are available.</p>
       9 : {% endif %}
    
    Exception Type: TypeError at /polls/
    Exception Value: argument 1 must be str, not PosixPath
    
[/code]

**該当のソースコード**  
settings.py

[code]

    import os
    
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    
    # Quick-start development settings - unsuitable for production
    # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
    
    # SECURITY WARNING: keep the secret key used in production secret!
    SECRET_KEY =
    
    # SECURITY WARNING: don't run with debug turned on in production!
    
    DEBUG = True
    
    ALLOWED_HOSTS = ["*"]
    
    
    # Application definition
    
    INSTALLED_APPS = [
        'polls.apps.PollsConfig',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    ROOT_URLCONF = 'mysite.urls'
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    WSGI_APPLICATION = 'mysite.wsgi.application'
    
    
    # Database
    # https://docs.djangoproject.com/en/4.0/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR / 'db.sqlite3'),
        }
    }
    
    
    # Password validation
    # https://docs.djangoproject.com/en/4.0/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',
        },
    ]
    
    
    # Internationalization
    # https://docs.djangoproject.com/en/4.0/topics/i18n/
    
    LANGUAGE_CODE = 'en-us'
    
    TIME_ZONE = 'Asia/Tokyo'
    
    USE_I18N = True
    
    USE_TZ = True
    
    
    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/4.0/howto/static-files/
    
    STATIC_URL = 'static/'
    
    # Default primary key field type
    # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
    
    DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
    
[/code]

**試したこと**  
settings.py

[code]

    ALLOWED_HOSTS = [""]→ALLOWED_HOSTS = ["*"]
    
[/code]

同様にsettings.py DATABASES

[code]

    'NAME': os.path.join(BASE_DIR / 'db.sqlite3'),　→　'NAME': os.path.join str(BASE_DIR / 'db.sqlite3'),
    
[/code]

に変更したところURLは表示できず、マイグレーション、runserverは以下のようにエラーでました。

[code]

    TypeError: unsupported operand type(s) for /: 'str' and 'str'
    
[/code]

また、settings.py DATABASESの変更前も同様のエラーが発生しました。

**追記**

settings.py DATABASES

[code]

    'NAME': str(os.path.join(BASE_DIR / 'db.sqlite3')),
    
[/code]

に変更後、改めてローカルでマイグレーション、runserverし直したがエラー

[code]

    unsupported operand type(s) for /: 'str' and 'str'
    
[/code]

同様にsettings.py DATABASES

[code]

    'NAME': os.path.join(BASE_DIR , 'db.sqlite3')),
    
[/code]

に変更後、ローカルでマイグレーション、runserve共にエラーなし。  
しかし、リモート上では表示できず。

また、参考サイトではDjangoのバージョンが3以上となっていたが、リモート上のエラーではstr推奨のために

[code]

    'NAME': os.path.join(str(BASE_DIR) , 'db.sqlite3')),
    
[/code]

に変更してみたが、ローカルでマイグレーション、runserve共にエラーなし。  
しかし、リモート上では表示できず。

**補足(ツールのバージョン等)**  
python 3.6.9  
django 2.2.7  
windows10

Python,djangoのローカルとリモートのバージョンを統一済み。

**参考サイト**  
<https://www.codingforentrepreneurs.com/comments/17266>


CC BY-SA 4.0
2022-05-25T06:09:46.403
89040
2022-05-31T15:07:54.460
2022-05-31T15:07:54.460
52539
52539
question
python html django
ローカルサーバにあるwebアプリをリモートサーバの転送先のURLで表示させることができない。


最初のエラーに

[code]

    argument 1 must be str, not PosixPath
    
[/code]

とあるように`str`であるべき引数が`PosixPath`になっているのが原因かと思われます。

NAMEを以下のようにstrに変換してから渡すといかがでしょうか？

[code]

    'NAME': str(os.path.join(BASE_DIR / 'db.sqlite3')),
    
[/code]

こちらのリンクも参考になると思います。  
<https://utubou-tech.com/type-error_posixpath/>


CC BY-SA 4.0
2022-05-30T09:07:14.610
89138
2022-05-30T09:08:02.360
2022-05-30T09:08:02.360
52861
52861
89040
answer