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

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

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

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

Python

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

Q&A

1回答

1356閲覧

djangogirlsのチュートリアルにおいて webブログの本文が表示されません

rike

総合スコア0

Django

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

Python

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

0グッド

0クリップ

投稿2021/11/05 15:44

編集2021/11/05 15:55

前提・実現したいこと

初めての質問ですので拙い文章でしたらすみません。
djangogirlsチュートリアルでのwebブログ作成においての質問です。

仮想環境ではチュートリアル通りにwebブログを表示することが出来たのですが、
デプロイ後の画面ではブログタイトルしか表示されず、本文が表示されません。

どうやら
blog/templates/blog/post_list.htmlにて
{% for post in posts %}で囲われた部分がうまくいっていないようです。

djangogirlsに乗っているコードをそのままコピーペーストしているだけなのですが、どこかでうまくいかなくなってしまったみたいです。

該当のソースコード

post_list.html

post_list.html

1<div> 2 <h1><a href="/">Django Girls Blog</a></h1> 3</div> 4 5{% for post in posts %} 6 <div> 7 <p>published: {{ post.published_date }}</p> 8 <h2><a href="">{{ post.title }}</a></h2> 9 <p>{{ post.text|linebreaksbr }}</p> 10 </div> 11{% endfor %}

views.py

views.py

1from django.shortcuts import render, get_object_or_404 2from django.shortcuts import render 3from django.utils import timezone 4from .models import Post 5from django.views.generic import ListView 6 7class PostListView(ListView): 8 model = Post 9 10 def get_queryset(self): 11 return Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date') 12 13def post_list(request): 14 posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 15 return render(request, 'blog/post_list.html', {'posts': posts}) 16 17def post_detail(request, pk): 18 post = get_object_or_404(Post, pk=pk) 19 return render(request, 'blog/post_detail.html', {'post': post}) 20

setting.py

setting.py

1""" 2Django settings for mysite project. 3 4Generated by 'django-admin startproject' using Django 2.2.24. 5 6For more information on this file, see 7https://docs.djangoproject.com/en/2.2/topics/settings/ 8 9For the full list of settings and their values, see 10https://docs.djangoproject.com/en/2.2/ref/settings/ 11""" 12 13import os 14 15# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 18 19# Quick-start development settings - unsuitable for production 20# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ 21 22# SECURITY WARNING: keep the secret key used in production secret! 23SECRET_KEY = '8jkypoy2d4*t!d3c_xg4(&vh!@s-)qjn4)rgj7sc5*940bdqt2' 24 25# SECURITY WARNING: don't run with debug turned on in production! 26DEBUG = True 27 28ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com'] 29 30 31# Application definition 32 33INSTALLED_APPS = [ 34 'django.contrib.admin', 35 'django.contrib.auth', 36 'django.contrib.contenttypes', 37 'django.contrib.sessions', 38 'django.contrib.messages', 39 'django.contrib.staticfiles', 40 'blog.apps.BlogConfig', 41] 42 43MIDDLEWARE = [ 44 'django.middleware.security.SecurityMiddleware', 45 'django.contrib.sessions.middleware.SessionMiddleware', 46 'django.middleware.common.CommonMiddleware', 47 'django.middleware.csrf.CsrfViewMiddleware', 48 'django.contrib.auth.middleware.AuthenticationMiddleware', 49 'django.contrib.messages.middleware.MessageMiddleware', 50 'django.middleware.clickjacking.XFrameOptionsMiddleware', 51] 52 53ROOT_URLCONF = 'mysite.urls' 54 55TEMPLATES = [ 56 { 57 'BACKEND': 'django.template.backends.django.DjangoTemplates', 58 'DIRS': [], 59 'APP_DIRS': True, 60 'OPTIONS': { 61 'context_processors': [ 62 'django.template.context_processors.debug', 63 'django.template.context_processors.request', 64 'django.contrib.auth.context_processors.auth', 65 'django.contrib.messages.context_processors.messages', 66 ], 67 }, 68 }, 69] 70 71WSGI_APPLICATION = 'mysite.wsgi.application' 72 73 74# Database 75# https://docs.djangoproject.com/en/2.2/ref/settings/#databases 76 77DATABASES = { 78 'default': { 79 'ENGINE': 'django.db.backends.sqlite3', 80 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 81 } 82} 83 84 85# Password validation 86# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators 87 88AUTH_PASSWORD_VALIDATORS = [ 89 { 90 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 91 }, 92 { 93 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 94 }, 95 { 96 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 97 }, 98 { 99 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 100 }, 101] 102 103 104# Internationalization 105# https://docs.djangoproject.com/en/2.2/topics/i18n/ 106 107LANGUAGE_CODE = 'ja' 108 109TIME_ZONE = 'Asia/Tokyo' 110 111USE_I18N = True 112 113USE_L10N = True 114 115USE_TZ = True 116 117 118# Static files (CSS, JavaScript, Images) 119# https://docs.djangoproject.com/en/2.2/howto/static-files/ 120 121STATIC_URL = '/static/' 122STATIC_ROOT = os.path.join(BASE_DIR, 'static') 123

試したこと

静的ファイルがうまく作動していない?と思ったので
setting.pyを確認して、
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
が記述してあることを確認しました。
また、pythonanywhereのでstaticfileも設定したのですがうまくいきませんでした。
そのほかネットで調べられる範囲のことはいろいろやったのですが、だめでした。

デプロイ時などにエラーがでることもないので、どこがうまくいっていないのか全くわかりません。

どうかよろしくお願いいたします。

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

仮想環境でのwebブログ表示
イメージ説明

デプロイ後のwebブログの表示
イメージ説明

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

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

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

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

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

guest

回答1

0

データベースに記事は入ってますか?
(posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')でちゃんと取れてますか?)

投稿2021/11/05 18:28

kyokio

総合スコア560

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

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

rike

2021/11/06 01:41

無知で申し訳ないのですが、 データベースとはどこのことを示していますか。
rike

2021/11/06 01:46

views.pyのことですよね? def post_list(request): posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') return render(request, 'blog/post_list.html', {'posts': posts}) こんな感じで定義してあります。
kyokio

2021/11/06 05:25

db.sqlite3です。 上のviewのとこでPostモデルのデータをフィルター使って取得していますが、そこでちゃんととって来れているのかが気になります。 そこをまず確認してみてください。
rike

2021/11/06 15:29

sqlite> select*from (blog_post); で確認してみたら記事が出てきました。
kyokio

2021/11/06 15:35

ありがとうございます。 でしたら def post_list(request): posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') return render(request, 'blog/post_list.html', {'posts': posts, 'size': len(posts)}) 上のように変更してHTMLの方で{{ size }}でHTMLに受け渡されているか確認 →渡されてる。テンプレートの方の問題 →渡されていない。viewsの問題 と原因箇所を絞っていくといいと思います。
rike

2021/11/06 18:06

絞って確認していったところ、sizeは読み込むことができるのを確認したので、 viewsをもう一度djangogirlsのチュートリアルのものをコピペなどしてやり直しました。 その結果、やはり原因は不明なのですが、どうやら デプロイすると、post部分だけ読み込んでくれないみたいです。 対して、sizeは出力することができ、仮想環境だとの数字は8が表示され、 デプロイ後画面だと0が表示されました。 このことからもやはりpostがうまく読み込まれていないことだけがわかりました。
kyokio

2021/11/06 18:11

デプロイをどんな環境でやっているのかわからないので、憶測になりますが権限の問題ではないでしょうか? sqlite3がrootになっててDjangoがユーザー権限で実行されているから取れていない可能性があります
rike

2021/11/06 18:22

デプロイはpythonanywhereでやっています。 権限をどうにかするにはどうしたらよいのでしょうか。 丸投げな質問ですみません。
kyokio

2021/11/07 10:35

pythonanywhereを使用したことがないので、あまり詳しいことは言えないですが、調べた感じターミナルの操作ができると思うので、sqlite3があるところでls -laしてsqlite3の権限を確認してみてください
rike

2021/11/07 12:30

sqlite3の権限を確認すると 読み込みだけ許可されていたので、実行を付与してみましたが、うまくいきませんでした。。。
kyokio

2021/11/07 14:32

userとGroupがrootではなくて、r権限があるのであれば権限の問題ではないかもしれないですね 質問内容を変えて聞くと詳しい人が教えてくれるかもしれないです。
rike

2021/11/07 15:21

質問内容など改めてもう一度確認して、投稿してみようと思います。 長い間、質問に付き合っていただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問