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

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

ただいまの
回答率

88.64%

変数が表示されない。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 292

SyunSyun

score 19

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

<blog/post_list.html>
{% block content %}
総記事数:<p>{{ num }}</p>
  {% for post in posts %}
    <div class="post">
        <div class="date">
            {{ post.published_date }}
            <div class="column">
            <p>コラム:{{ post.id }}</p>
            </div>
            <div>
              <p>投稿者:
                {% if post.author == "TARO" %}<h3></h3>{% endif %}
                {% if post.author == "HANAKO" %}<h3></h3>{% endif %}
                {% if post.author == "ICHIRO" %}<h3>息子</h3>{% endif %}
              </p>

            </div>
        </div>
        <h2><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h2>
        <p>{{ post.sub_title}}</p>
        <p>{{ post.text|linebreaksbr }}</p>
    </div>
  {% endfor %}
  <div class="pagination">
{% if data.has_previous %}
        <a href="{% url 'index' %}">&laquo;First</a>
        <a href="{% url 'index' %}{{data.previous_page_number}}">&laquo;Prev</a>
{% endif %}
        <span class="current">
          [{{data.number}}/{{data.paginator.num_pages}}]
        </span>
{% if data.has_next %}
        <a href="{% url 'index' %}{{data.next_page_number }}">Next&raquo;</a>
        <a href="{% url 'index' %}{{data.paginator.num_pages }}">Last&raquo;</a>
{% endif %}
  </div>
{% 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 + '>')
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SyunSyun

    2019/12/17 18: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 20:25

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

    キャンセル

  • SyunSyun

    2019/12/17 21:07

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

    キャンセル

回答 1

checkベストアンサー

+1

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

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

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

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

Django Userモデルへの参照方法

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/18 05:37 編集

    有難うございました。
    貴重な時間を割いて頂いて、大変感謝しています。
    もし機会がありましたら、今後もよろしくお願いいたします。

    あの後、もう一度コードを見直していたらここに問題があったようです。
    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さんとの会話のおかげです。
    有難うございました。
    ご迷惑をお掛けしました。

    キャンセル

  • 2019/12/18 09:13

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

    キャンセル

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

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る