YURUGINoriko
@YURUGINoriko

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Django WebアプリケーションのHTMLの中で、if文が正しく判定されない

解決したいこと

エラーにはならないのですが
HTML内のif文が期待した動きをしてくれません

発生している問題・エラー

データのユーザとアクセスしているユーザが同じだったら
編集ボタンを出す処理をしたいのですが
        {% if request.user == deta.author %}
            <a href="{% url 'edit' id=data.id %}" class="button">編集</a>
        {% endif %}
とすると、
ユーザーが等しくても異なっていてもすべて
編集ボタンが出ない状況です。

デバッグコーディングを入れて
request.user と deta.authorを
表示させていますが
request.user = deta.author
の場合でも編集ボタンが出ません。
画像の赤い矢印のところです

userequal.jpg

該当するソースコード

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>DETAIL</title>
        {% load static %}
        <link rel="stylesheet" type="text/css"
         href="{% static 'triplog/style.css' %}">
    </head>
    <body>
        <h1>{{ title }}</h1>
        <h2>【 {{ data.title}} 】</h2>
        <p>{{ data.content }}</p>

        <div class="map">
            <p>{{ map | safe }}</p>
        </div>
        {{ request.user }} {{ data.author }}
        {% if request.user == deta.author %}
            <a href="{% url 'edit' id=data.id %}" class="button">編集</a>
        {% endif %}
        <p><a href="{% url 'index' %}">一覧画面に戻る</a></p>
    </body>
</html>                            

自分で試したこと

比較したい request.user と deta.authorに
改行文字や空白があるのかもしれないと思い
{% if request.user == deta.author %}
             ↓
{% if strip.request.user == strip.deta.author %}

のようにstrip.を入れてみましたが今度は
ユーザーが等しくても異なっていてもすべて
編集ボタンが出るようになってしまいました。

    {% if strip.request.user == strip.deta.author %}
        <a href="{% url 'edit' id=data.id %}" class="button">編集</a>
    {% endif %}
0

3Answer

if 文の中で使っている deta.authordata.author の間違いではありませんか?

1Like

Comments

  1. @YURUGINoriko

    Questioner

    はいそうでした^^;;

    {% if request.user == data.author %}

    としたところ思い通りの動きとなってくれました。

    ありがとうございます。<(_ _)>

大変お騒がせして申し訳ありませんでした。

以後、スペルミスがないかどうかを
十分にチェックして解決しない場合に
こちらに相談したいと思います。

ありがとうございました。
Djangoのお勉強頑張ります💪

1Like

もしかしたら,request.userdata.authorの型が違うかもしれません1.Djangoの公式ドキュメント

にあるように,

{% if request.user|stringformat:"s" == data.author|stringformat:"s" %}

で実行してみてはいかがでしょうか.先のリンクはフォーマット指定子が指数表記にするためのEでしたが,

ここに記されているように,sでやってあげればPythonで言うstr()と同じ効果を持つようです.みかけは文字列かもしれませんが,フォーマットしてあげて確実な文字列として比較してあげると良いと思います.

(追記) @uasi さんの言う通り,deta.authorという誤字が原因説強めです.(気づきませんでした:sweat_smile:)

  1. https://chuna.tech/detail/48/

0Like

Comments

  1. @YURUGINoriko

    Questioner

    スペルミス修正で解決したのですが
    確実な文字列として比較するコーディングの方法が
    勉強になりました。

    ありがとうございます。<(_ _)>

Your answer might help someone💌