🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1227閲覧

変数が表示されない。

SyunSyun

総合スコア24

Django

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/16 23:22

Django初心者です。
post_list.htmlファイルの2行目の{{num}}とline 13-15 のif文が成立するときの「夫」などの文字が表示されません。エラーが表示されるのではなく、正常なサイト画面に総記事数:(空欄)や投稿者:(空欄)となりその変数や「夫」などの文字が代入されません。
どのコードが間違っているのでしょうか?
ご教授頂けると幸いです。

Python

1<blog/post_list.html> 2{% block content %} 3総記事数:<p>{{ num }}</p> 4 {% for post in posts %} 5 <div class="post"> 6 <div class="date"> 7 {{ post.published_date }} 8 <div class="column"> 9 <p>コラム:{{ post.id }}</p> 10 </div> 11 <div> 12 <p>投稿者: 13 {% if post.author == "TARO" %}<h3></h3>{% endif %} 14 {% if post.author == "HANAKO" %}<h3></h3>{% endif %} 15 {% if post.author == "ICHIRO" %}<h3>息子</h3>{% endif %} 16 </p> 17 18 </div> 19 </div> 20 <h2><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h2> 21 <p>{{ post.sub_title}}</p> 22 <p>{{ post.text|linebreaksbr }}</p> 23 </div> 24 {% endfor %} 25 <div class="pagination"> 26{% if data.has_previous %} 27 <a href="{% url 'index' %}">&laquo;First</a> 28 <a href="{% url 'index' %}{{data.previous_page_number}}">&laquo;Prev</a> 29{% endif %} 30 <span class="current"> 31 [{{data.number}}/{{data.paginator.num_pages}}] 32 </span> 33{% if data.has_next %} 34 <a href="{% url 'index' %}{{data.next_page_number }}">Next&raquo;</a> 35 <a href="{% url 'index' %}{{data.paginator.num_pages }}">Last&raquo;</a> 36{% endif %} 37 </div> 38{% endblock %}
<views.py> from django.contrib.auth.decorators import login_required from django.shortcuts import redirect from django.shortcuts import render from django.utils import timezone from .models import Post from django.shortcuts import render, get_object_or_404 from .forms import PostForm from django.core.paginator import Paginator def post_list(request): posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date').reverse() num = Post.objects.all().count() params = { 'posts' : posts, 'num' : num, } return render(request, 'blog/post_list.html', params)
<models.py> from django.conf import settings from django.db import models from django.utils import timezone class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) title = models.CharField(max_length=200) sub_title = models.CharField(max_length=100) text = models.TextField() created_date = models.DateTimeField(default=timezone.now) published_date = models.DateTimeField(blank=True, null=True) def publish(self): self.published_date = timezone.now() self.save() def __str__(self): return str(self.title + '<' +self.sub_title + '>')

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

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

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

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

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

azuapricot

2019/12/17 00:40

【確認してほしいこと】 ・まずviewの段階で num, posts に中身は入っているのか ・viewからtemplateへの画面遷移は問題なくできているのか
SyunSyun

2019/12/17 00:54

azuapricotさん。 早速のご回答ありがとうございます。 すでに10数個のデータは入っており、numにはその総計、Postsにはmodels.pyで指定したデータが既に10数個はいっています。 viewからtemplateへの画面遷移も仮想空間上では問題なくできております。
azuapricot

2019/12/17 01:16

template で {{posts}} を表示したらどうなりますか?
SyunSyun

2019/12/17 07:23

早速、<p>{{ num }}</p> を <p>{{ posts }}</p>と変換したところ、 総記事数:(空欄)であったところが、総記事数:<Page 2 of 2>という表記になりました。
azuapricot

2019/12/17 07:27

ふむ、空っぽというわけではなさそうですね。 ではもう一点 for文の中で {{post}} を出力したらどうなりますか? きちんと中身は表示されますか?
SyunSyun

2019/12/17 07:39

素早い回答ありがとうございます。 試してみました。 すると、class Post の def __str__関数のstr(self.title + '<' +self.sub_title + '>')が出力されました。
azuapricot

2019/12/17 08:03

あーもしかしてこれDjangoのチュートリアルか何かを応用してますか? def __str__(self): この関数削除してもう一度実行してみてもらえますか?
SyunSyun

2019/12/17 08:27

Djangogirlsを応用して勉強しています。 def __str__(self)関数を削除して実行してみると Post object (1)が出力されました。
azuapricot

2019/12/17 08:32

その状態でも 他の項目は出力されませんか? {{ post.title }} とか
SyunSyun

2019/12/17 08:39

__str__関数を削除した状態で実行するとやはり 記事数:<Page 1 of 2> 2019年12月8日9:51 コラム:Post object (2) 投稿者: と表記され、投稿者:に続いて(空欄)が出力されでコラム:に続いてPost object(X)となり、自分が予定する出力とは異なります。
azuapricot

2019/12/17 08:43

記載してないだけでPagination に関する記述をviews.pyに書いていたりしませんか?
SyunSyun

2019/12/17 08:45

{{ post.title }}部分やその他の部分は最初から正常に出力されます。 何故か2行目の{{num}}とline 13-15 のif文のみ出力されません。 すいません。説明不足でした。
azuapricot

2019/12/17 08:51

あぁ。そういうことでしたか {{num}} が <Page 1 of 2> と出力される = 件数が取れていない or ページネーションの変数名と被っている可能性あり line 13-15 に関しては{{post.author}} に想定している値が入っていることは確認できてますか?
SyunSyun

2019/12/17 08:51

書いています。 def index(request, num=1): data = Post.objects.all() page = Paginator(data, 4) params = { 'posts':page.get_page(num), 'data':page.get_page(num), } return render(request, 'blog/post_list.html', params) という関数でページネーションしています。
azuapricot

2019/12/17 08:52

{{ num }} のところ {{posts}} から {{ num }} に戻してますよね??
azuapricot

2019/12/17 08:56

ページネーションしてるんかーい んん・・・・def post_list(request): の中ってちゃんと通ってるんですよね?? index関数を通って、 post_list関数を通っていない可能性とかありませんか?
azuapricot

2019/12/17 09:05

あぁ。見落としてましたが、 post.author は外部キーなんですね。 外部キーは post.author だと authorオブジェクトが取得できるだけなので、そこからさらに深くもう一段欲しいものを取得しにいかないといけません。
azuapricot

2019/12/17 09:06

authorに何が入っているのかは分かりませんが、 post.author.author とかでとれませんでしたかね(うろ覚え)
SyunSyun

2019/12/17 09:35

{{ num }} のところ {{posts}} から {{ num }} に戻すとまた空欄になります。 post.authorだけだではなく、さらに深くしないといけないのですね。 post.author.authorで試してみましたが、やはり空欄でした。 def post_list(request)がキチンとurls.pyで操作されているか確かめてみます。 ちなみに現状のurls.pyはこちらです。 urlpatterns = [ path('', views.index, name='index'), path('post/<int:pk>/', views.post_detail, name='post_detail'), path('post/new/', views.post_new, name='post_new'), path('post/<int:pk>/edit/', views.post_edit, name='post_edit'), path('drafts/', views.post_draft_list, name='post_draft_list'), path('post/<pk>/publish/', views.post_publish, name='post_publish'), path('post/<pk>/remove/', views.post_remove, name='post_remove'), path('<int:num>', views.index, name='index'), ]
azuapricot

2019/12/17 11:25

urls.pyのどこにも post_list の記述なくないですか???
SyunSyun

2019/12/17 12:07

azuapricot さんの指摘でpath('', views.post_list, name='index')として無事{{num}}は表示されるようになりました! 有難うございました。 ただまだif 文以下が空欄になってしまうのはpost.author.author == 'TARO'にしても不変でした。 また自分でもう少し勉強してみます。 もし試したほうがよいことが何かありましたら、ご教授してくださるとありがたいです。 BestAnswerにしたいので、回答してもらえますか?
guest

回答1

0

ベストアンサー

authorに関しては、私の過去質問が参考になるかもしれないので目を通してもらうと良いかもしれません

【Django / INNER JOIN】 二つのテーブルをJOINしたい

テーブルの中身が見れればどうやって取得したらよいかもわかるかもしれません
post.author.username とか手あたり次第やってみたらなんかでてくるかも

あとは settings.AUTH_USER_MODELについてのこの記事を読んでみるとかでしょうか

Django Userモデルへの参照方法

投稿2019/12/17 12:15

編集2019/12/17 12:18
azuapricot

総合スコア2341

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

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

SyunSyun

2019/12/17 21:19 編集

有難うございました。 貴重な時間を割いて頂いて、大変感謝しています。 もし機会がありましたら、今後もよろしくお願いいたします。 あの後、もう一度コードを見直していたらここに問題があったようです。 def post_list関数のこのコードで posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date').reverse() filterを掛けていました。 それを削除してこうしました。 posts = Posts.objects.order_by('published_date').reverse() するときちんと想定した通りの出力になりました。 ここに気が付けたのもazuapricotさんとの会話のおかげです。 有難うございました。 ご迷惑をお掛けしました。
azuapricot

2019/12/18 00:13

解決できたようでなによりです◎
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問