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

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

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

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

Python

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

Q&A

解決済

1回答

3873閲覧

デプロイしたページでDjangoテンプレートの変数を表示できない

Sano

総合スコア19

Django

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

Python

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

1グッド

1クリップ

投稿2018/11/16 09:19

Django Girls TutorialでDjangoを学習しています。 
デプロイさせて、viewから値を受け取ったりしないプレーンなTemplatesを表示させることはできました。
ですが、Djangoテンプレートタグを使って変数を表示させる部分が、インターネットに公開しているほう(ローカルではなくデプロイしたPythonAnyWhere使用しているほう)に限り、表示させることができません。ローカルだとpostが表示され,意図通りに動きます。
進めていてうまくいかなかったところ

ローカルだと動き、デプロイしたほうでは{%for post in posts %} から{%endfor%}までが表示されないプログラム

<html> <head> <title>Django Girls blog</title> </head> <body> <div> <h1><a href="/">Django Girls Blog</a></h1> </div> {% for post in posts %} <div> <p>published: {{ post.published_date }}</p> <h1><a href="">{{ post.title }}</a></h1> <p>{{ post.text|linebreaksbr }}</p> </div> {% endfor %} </body> </html>

pythonanywhere/adminのほうでpost(記事)はいくつか追加していますが表示されません
chromeブラウザで表示されない部分があるページの "ページのソースを表示" をしてみると

<html> <head> <title>Django Girls blog</title> </head> <body> <div> <h1><a href="/">Django Girls Blog</a></h1> </div> </body> </html>

となっており{% から始まる部分は表示されません
ちなみに、ローカルでの同じhtmlのソースは

<html> <head> <title>Django Girls blog</title> </head> <body> <div> <h1><a href="/">Django Girls Blog</a></h1> </div> <div> <p>公開日: 2018年11月10日2:44</p> <h1><a href="">test</a></h1> <p>test</p> </div> <div> <p>公開日: 2018年11月15日21:29</p> <h1><a href="">test02</a></h1> <p>hi</p> </div> <div> <p>公開日: 2018年11月15日22:34</p> <h1><a href="">test03</a></h1> <p>Hi</p> </div> </body> </html>

となっており変数が表示されています。
なぜ、表示されないのか、表示させる方法を教えてほしいです。
細かな設定は[チュートリアル]をご覧ください。チュートリアルに基づいて作成しましたので同じ内容となっています。
(https://tutorial.djangogirls.org/ja/)
よろしくお願いします。

matsufff👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

さまざまな原因の可能性が考えられるかと思います。直接の答えではありませんが、問題解決を進めるヒントになればと思い回答させていただきます。

私がパッと思う付く代表的な原因のパターンはおおよそ次のとおりです。

  • a) ローカルと Heroku でコードが異なる
  • b) ローカルと Heroku でコードは共通だが、設定が異なる
  • c) ローカルと Heroku でコードと設定は共通だが、 DB の状態が異なる

a) は、「該当する一連のコードをコミットしてデプロイしたつもりだったけど、実はできていなかった」というパターンです。「そんなことは無い」と思われることと思いますが、一人で作業をしていると「つもり」で実はできていなかった、ということが稀にあります。問題の領域を確実に絞り込むために、改めてご確認いただくとよいかと思います。この可能性が 0 だとわかれば、続いて b) あるいは c) を疑っていきます。

b) は、「 settings.py や環境変数の設定が異なる」というパターンです。今回の現象から見てこれの可能性は低いと思いますが、一般に「複数の環境でなぜか挙動が違う」という場合の原因として最も多いのはおそらくこれなので、こちらも改めてご確認されるとよいかもしれません。

c) は、「適応済みマイグレーションの状態や、該当するテーブルの状態が異なる」というパターンです。例えば、そのページの view の QuerySet

python

1Post.objects.filter(published_date__lte=timezone.now())

となっている場合は、条件を満たすレコードが 1 件も無い可能性があるものと思います。「ローカルでは条件を満たすレコードがあるが、 Heroku には無い」ということもありうるので確認してみてください。

例えば Heroku 上で複数のデータベースを使われている場合には、 Django が使っているデータベースと自分がデータを投入したデータベースが違う、ということもありえます。

問題の切り分けに便利なのは manage.py shell です。

Heroku でこれが使えるかどうか覚えていないのでその点はご確認いただきたいのですが、 manage.py shell でコンソールに入って、対象 view のクエリセットを再現したときに該当するレコードが何件あるかを確認されると、少なくとも「テンプレートの問題なのか、テンプレートに渡されるデータの問題なのか」の切り分けはできるものと思います。

また、データベースの違いの可能性を排除されたい場合は、ローカルと Heroku の一方で manage.py dumpdata をしてその出力をもう一方に manage.py loaddata するしてからデバッグを進められるとスムーズかと思います(必要に応じてバックアップを取ってください)。

「これ!」という解決策の提示ではありませんが、ご参考になればと思います。

(リンクされているページは見ましたが、私は Django Girls Tutorial の内容をほぼ知らずにコメントしています。前提の認識が間違っていればすみません)

投稿2018/11/17 09:06

gh640

総合スコア1407

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

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

Sano

2018/11/27 23:11

返信が非常に遅くなってしまい申し訳ありません。 詳しく書いてくださりありがとうございました。 回答にあった通りの可能性を全て確認し、チュートリアルと自分のコードの違いを何度も確認しましたが、原因を見つけることはできませんでした。 なので、チュートリアルの序盤と割りきり、もう一度最初からやってみました。 その時は問題なく動きました。 今回のアドバイスを参考にこれからの学習を進めていきたいと思います。 ありがとうございました。
gh640

2018/11/28 07:53

ご返信いただきありがとうございます。 そうでしたか。謎は謎のままですが、ともあれやり直す形でご解決されたとのことでよかったです。 はい、デバッグのアプローチ自体は他の場面でも使えると思いますので、ぜひご参考になさってください。ご丁寧にありがとうございます :)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問