質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4305閲覧

ローカルサーバにあるPythonのDjangoで作ったwebアプリをリモートサーバの転送先のURLで表示させることができない。

sakanaku

総合スコア17

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/25 13:49

編集2021/04/26 04:37

前提・実現したいこと

Macのターミナルを使ってローカルにあるPythonのDjangoで作ったwebアプリファイルをリモートサーバに転送すると転送先のURLで下記のようなエラーがでてしまいます。

エラーメッセージ

TypeError at /アプリネーム/ argument 1 must be str, not PosixPath Request Method: GET Request URL: http://相手URL/アプリネーム/ Django Version: 2.2.7 Exception Type: TypeError Exception Value: argument 1 must be str, not PosixPath Exception Location: /usr/local/lib/python3.6/dist-packages/django/db/backends/sqlite3/base.py in get_new_connection, line 194 Python Executable: /usr/local/bin/uwsgi Python Version: 3.6.9 Python Path: ['.', '', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages'] Server time: Sun, 25 Apr 2021 07:02:50 +0000 Error during template rendering In template /var/www/django/ファイル名/アプリネーム/templates/アプリネーム2/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 %} 10

下記の部分の文法でエラーがでてしまいました。

アプリネーム/index.html

{% if latest_question_list %} ←この行がエラーでています。 <ul> {% for question in latest_question_list %} <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li> {% endfor %} </ul> {% else %} <p>No polls are available.</p> {% endif %}

自分のPCのローカルサーバではしっかりwebアプリケーションは動作しています。どのようにすればリモートサーバでも動作させることができるでしょうか?下記ようなURLに転送させたいです。

http://相手URL/アプリネーム/」

このURLにSafariとChromeを使ってアクセスしましたがどちらとも同じエラーでした。

いろいろ調べてみてDjangoのsettings.pyがいけないのかなと?と考えていますがこのエラーは治りません。

###追記
Djangoのバージョンをローカルとリモートのバージョンを統一してからランサーバーしてでたエラー。

$python3 manage.py runserver 0.0.0.0:8000 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). Exception in thread django-main-thread: Traceback (most recent call last): File "/Users/myfile/.pyenv/versions/3.6.5/lib/python3.6/threading.py", line 916, in _bootstrap_inner self.run() File "/Users/myfile/.pyenv/versions/3.6.5/lib/python3.6/threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "/Users/myfile/.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/utils/autoreload.py", line 54, in wrapper fn(*args, **kwargs) File "/Users/myfile/.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/migrations/loader.py", line 212, in build_graph self.applied_migrations = recorder.applied_migrations() File "/Users/myfile/.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 73, in applied_migrations if self.has_table(): File "/Users/myfile/.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 56, in has_table return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()) File "/Users/myfile/.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 194, in get_new_connection conn = Database.connect(**conn_params) TypeError: argument 1 must be str, not PosixPa

マイグレーションを実行した際のエラー

Traceback (most recent call last): File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv self.execute(*args, **cmd_options) File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute output = self.handle(*args, **options) File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped res = handle_func(*args, **kwargs) File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/backends/base/base.py", line 233, in _cursor self.ensure_connection() File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site- TypeError: argument 1 must be str, not PosixPath During handling of the above exception, another exception occurred: Traceback (most recent call last): File "manage.py", line 22, in <module> main() File "manage.py", line 18, in main execute_from_command_line(sys.argv) File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line utility.execute() File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/core/management/base.py", line 336, in run_from_argv connections.close_all() File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/utils.py", line 224, in close_all connection.close() File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 248, in close if not self.is_in_memory_db(): File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 367, in is_in_memory_db return self.creation.is_in_memory_db(self.settings_dict['NAME']) File "/Users//.pyenv/versions/3.6.5/lib/python3.6/site-packages/django/db/backends/sqlite3/creation.py", line 12, in is_in_memory_db return database_name == ':memory:' or 'mode=memory' in database_name TypeError: argument of type 'PosixPath' is not iterable

###試したこと

settings.pyの

ALLOWED_HOSTS = [""]→ALLOWED_HOSTS = ["*"]

ワイルドカードを用いましたが、結果は変わらずでした。

エラーメッセージでてから改めてローカルでrunserverし直しましたがエラーでませんでした。

python3 manage.py runserver 0.0.0.0:8000

マイグレーションもやり直して特にエラーでませんでした。

python3 manage.py makemigrations python3 manage.py migrate

ぜひ、アドバイスいただきたいです。よろしくお願いします。

該当のソースコード

from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent 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 = 'アプリネーム.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 = 'アプリネーム.wsgi.application' # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # Password validation # https://docs.djangoproject.com/en/3.2/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/3.2/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.2/howto/static-files/ STATIC_URL = '/static/' # Default primary key field type # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

補足情報(FW/ツールのバージョンなど)

Python3.6.9
Django2.2.7
MacOS
terminal

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/04/25 20:42

エラーが出てるのはソースファイルのどの部分ですか? また、URL の http://転送ファイル名.相手URL/アプリネーム/ に「転送ファイル名.」が出てくる意味が分かりません。
sakanaku

2021/04/25 23:35

ご回答ありがとうございます。エラー箇所は templates/アプリネーム/index.html のindex.htmlの上記の本文に追加させてもらったところでエラーがでてしまいます。 >>URL の http://転送ファイル名.相手URL/アプリネーム/ に「転送ファイル名.」が出てくる意味が分かりません。 こちら私のお伝えミスだと考えられます。 http://相手URL/アプリネーム/ このようなURLに転送したいです。
etherbeg

2021/04/25 23:57

エラー文は自分でかいつまんで一部を書き込むのではなく、全文をそのまま、質問文中に貼ってください。 あとリモートサーバの種類(何かサービスを利用しているのだったらそのサービス名)と、リモートサーバでのPythonとDjangoのバージョンも知っておきたいですね。質問文中に追記してください。
sakanaku

2021/04/26 00:11

ご回答ありがとうございます。エラー全文ひょうじさせてもらいました。 リモートサーバのバージョンが現時点では分からないです。。
sakanaku

2021/04/26 00:12

分かり次第追記さしてもらいます。
etherbeg

2021/04/26 00:30

リモートサーバでのPythonとDjangoのバージョンは追記してもらったエラー文中に記載されているのでいいですよ。リモートサーバの種類はHerokuかなんか利用してるのかなと思ったんですけど、VPSとかですかね。
sakanaku

2021/04/26 00:38

はい、Herokuではないです。
etherbeg

2021/04/26 03:28 編集

Macのローカル環境のDjangoのバージョンが実は3.xとかありませんか?いちど確認してみてください。もしそうなら、リモートサーバの方のDjangoのバージョンもそれに合わせられるのなら合わせてから実行してみるといいと思います。
sakanaku

2021/04/26 04:27

ありがとうございます。まさにその通りでした!!ローカルが3.2だったので2.2.7にインストールし直しました。すると今度はローカルでランサーバーすると上記のようなエラーがでてしまいました。マイグレーションしても同じようなエラーがでています。 settings.pyの書き換えが必要ということなのでしょうか?
sakanaku

2021/04/26 04:32

よく、見るとマイグレーション実行した際は少し違ったエラーでしたので、そちらも追記さしてもらいました。
sakanaku

2021/04/26 04:50

settings.pyにstr( )を追加するとマイグレーションできランサーバーもできてさらにリモートサーバでも表示させることができました。 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(BASE_DIR / 'db.sqlite3'), } } 大変助かりました。丁寧なアドバイスいただきありがとうございました。
sakanaku

2021/04/26 04:53

ベストアンサーさんにさせていただきたいのですが、terarailの仕組み的に回答のところにコメントいただけないとだめなのですかね? よろしければ何か回答としてコメントいただければ、、ベストアンサーさせていただきたいです。
etherbeg

2021/04/26 05:04

なるほど、そこを直すだけで動くんですね。settings.pyの冒頭の部分を書き直すか、2.2.7で一から作り直すぐらいしか思いつきませんでした。 解答欄の方には途中の考察までを書き込ませていただきました。
guest

回答1

0

ベストアンサー

Django3.2だとsettings.pyの頭のところは

Python

1from pathlib import Path 2# Build paths inside the project like this: BASE_DIR / 'subdir'. 3BASE_DIR = Path(__file__).resolve().parent.parent

なんですけど、2.2.7だと

Python

1import os 2# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 3BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

なんですよね。

で、エラー文の TypeError: argument 1 must be str, not PosixPath っていうのは「データ型エラー:引数1はPosixPath型ではなくstr型でなくてはいけません」ってことで、Django3.2でのBASE_DIRのデータ型がPosixPathなんです。

こんな感じで試してみると分かるかと。

Python

1>>> from pathlib import Path 2>>> BASE_DIR = Path(__name__).resolve().parent.parent 3>>> BASE_DIR 4PosixPath('/xxxx') 5>>> type(BASE_DIR) 6<class 'pathlib.PosixPath'> 7>>> import os 8>>> BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__name__))) 9>>> BASE_DIR 10'/xxxx' 11>>> type(BASE_DIR) 12<class 'str'>

なので、Django3.2で作成したアプリをDjango2.7.7で動かしているのが原因ではないか、と睨んでいます。

投稿2021/04/26 05:04

etherbeg

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakanaku

2021/04/26 05:07

分かりやすい回答ありがとうございます。 上記のように実行すると解決することができました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問