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

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

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

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

Python

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

Q&A

解決済

2回答

1673閲覧

djangoでのhtml側でのリンク先の指定エラー

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

Python

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

0グッド

0クリップ

投稿2020/05/05 14:43

詳細画面(detail.html)からコメントページ(answer.html)へのhtml側のリンク先を指定していますがなぜか(一番下に記述した)エラーが出ます。

手入力でkome/2などとすると正常にコメントページが表示されます(urlsのpathが正常に通る)
また、htmlのリンク指定を"#"とすると正常にdetailが呼び出されてdetail.htmlが読み込まれます。

どうすればリンク先の間違いを指摘されずエラーを回避できるでしょうか?

調べるとpkが空になっているのが原因だと言われてますが....pkが空というのもよくわかりません....

python

1 ------urls------- 2 3path('detail/<int:pk>/', detail, name="detail"), 4path('kome/<int:pk>/', Kome.as_view(), name="kome"),

python

1 ---views----- 2 3def detail(request, pk): 4 object = Diary.objects.get(pk=pk) 5 return render(request, 'detail.html', {'object':object}) 6 7class Kome(CreateView): 8 9 model = Answer 10 fields = ( 'content','title') 11 template_name = 'kome.html' 12 13 def form_valid(self, form): 14 15 16 17 diary_pk = self.kwargs['pk'] 18 diary = get_object_or_404(Diary, pk=diary_pk) 19 20 21 answer = form.save(commit=False) 22 answer.user = self.request.user 23 answer.diary = diary 24 answer.save() 25 26 27 return redirect('detail', pk=diary_pk)

python

1 ------detail.html------- 2 3<h1>{{ object.title }}</h1> 4 5<a href="{% url 'kome' diary.pk %}">コメントページへ行く</a>  **これがわかりません....**
エラー内容です Reverse for 'kome' with arguments '('',)' not found 1 pattern(s) tried: ['answer\/(?P<pk>[0-9]+)\/$']

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

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

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

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

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

guest

回答2

0

ベストアンサー

diary.pkが空なのが原因かと思います。

そもそも、
return render(request, 'detail.html', {'object':object})
でobjectを渡しているので、
Diary.objects.get(pk=pk)
の内容を取得したければ、
{{ object.title }}のようにobject.(何か)とすれば取得できるかと思います。

url 'kome'の後に何の値が入ればいいのかがわからないので、予想になってしまいますが、もしdiaryのIDでページを振り分けているのがとしたら、

<a href="{% url 'kome' object.id %}">

でエラーがなくなるかと思います。

もしまだエラーが出る場合は、models.pyを追記した上で、kome/(int)のintに何の値を入れたいか教えてください。

投稿2020/05/05 16:57

llr114

総合スコア203

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

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

退会済みユーザー

退会済みユーザー

2020/05/06 01:07

回答ありがとうございます。object変数でうまくいきました class based viewからfunction basedに変更する際に変数をdiaryままだとなぜか勘違いをしていたみたいです.....
guest

0

まずdetail関数でdiaryという変数を定義してない気が、
detail.htmlのobjectとdiaryって同じものを指したいんですかね。

投稿2020/05/05 22:09

ForestSeo

総合スコア2722

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

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

退会済みユーザー

退会済みユーザー

2020/05/06 01:07

いつもありがとうございます。diaryではなくobject変数でした..... Hiadaさんもベストアンサーにしたい.....
ForestSeo

2020/05/06 01:09

ありがとうございます。 解決してよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問