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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

4518閲覧

djangoのtemplateの.pkを用いたurlの書き方。

makun1010

総合スコア59

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2022/09/10 13:06

前提

djangoを用いてアプリを開発しています。

実現したいこと

urlが正しく動作するようにしたい。

発生している問題・エラーメッセージ

Could not parse the remainder: '‘diary:diary_detail’diary.pk' from '‘diary:diary_detail’diary.pk'

該当のソースコード

html

1diary_list.html----------------------------------------------------------------------------- 2{% extends 'base.html'%} 3{% load static %} 4{% block title %}日記一覧|Private Diary{% endblock %} 5{% block active_diary_list %}active{% endblock %} 6{% block head %} 7<link href="{% static 'css/clean-blog.css' %}" rel="stylesheet"> 8{% endblock %} 9{% block contents %} 10<div class="container px-4 px-lg-5 my-div-style"> 11 <div class="row gx-4 gx-lg-5 justify-content-center"> 12 <div class="col-md-10 col-lg-8 col-xl-7"> 13 <div class="d-flex justify-content-end mb-4"> 14 <a class="btn btn-primary float-right" href="{% url 'diary:diary_create' %}">新規作成</a> 15 </div> 16 {% for diary in diary_list %} 17 <div class="post-preview"> 18 <a href="{% url ‘diary:diary_detail’diary.pk %}"> 19 <h2 class="post-title">{{ diary.title }} </h2> 20 <h3 class="post-subtitle">{{ diary.content|truncatechars:20 }} </h3> 21 </a> 22 <p class="post-meta">{{ diary.created_at }}</p> 23 </div> <hr class="my-4"> 24 {% empty %} 25 <p>日記がありません</p> 26 {% endfor %} 27 {% if is_paginated %} 28 <ul class="pagination"> 29 {% if page_obj.has_previous %} 30 <li class="page-item"> 31 <a class="page-link" href="?page=2 {{page_obj.previous_page_number }}"> 32 <span aria-hidden="true">&laquo;</span> 33 </a> 34 </li> 35 {% endif %} 36 {% for page_num in page_obj.paginator.page_range %} 37 {% if page_obj.number == page_num %} 38 <li class="page-item active"><a class="page-link" href="#">{{ page_num }}</a></li> 39 {% else %} 40 <li class="page-item"> 41 <a class="page-link" href="?page={{ page_num }}">{{ page_num }} </a> 42 </li> 43 {% endif %} 44 {% endfor %} 45 {% if page_obj.has_next %} 46 <li class="page-item"> 47 <a class="page-link" href="?page={{ page_obj.next_page_number }}"> 48 <span aria-hidden="true">&raquo;</span> 49 </a> 50 </li> 51 {% endif %} 52 </ul> 53 {% endif %} 54 </div> 55 </div> 56</div> 57{% endblock %} 58 59 60diary_detail.html------------------------------------------------------------ 61{% extends 'base.html' %} 62{% load static%} 63{% block title %}日記詳細{% endblock %} 64{% block active_diary_list %}active{% endblock %} 65{% block contents %} 66<div class="container my-div-style"> 67 <div class="row"> 68 <div class="col-3"> 69 <strong>11</strong> 70 </div> 71 <div class="col-9"> 72 {{ object.title }} 73 </div> 74 </div> 75<hr> 76 <div class="row"> 77 <div class="col-3"> 78 <strong>本文 </strong> 79 </div> 80 <div class="col-9"> 81 {{ object.content|linebreaksbr }} 82 </div> 83 </div> 84 <hr> 85 <div class="row"> 86 <div class="col-3"> 87 <strong> 写真</strong> 88 </div> 89 <div class="col-3"> 90 {% if object.photo1%} 91 <img src="{{ object.photo1.url}}" width="200" height="200"/> 92 {% endif %} 93 </div> 94 <div class="col-3"> 95 {% if object.photo2 %) 96 <img src="{{ object.photo2.url}}" width="200" height="200"/> 97 {% endif %) 98 </div> 99 <div class="col-3"> 100 {% if object.photo3 %} 101 <img src="{{ object.photo3.url }}" width="200" height="200"/> 102 {% endif %} 103 </div> 104 </div> 105 <hr> 106 <div class="row"> 107 <div class="col-3"> 108 <strong>作成日時 </strong> 109 </div> 110 <div class="col-9"> 111 {{ object.created_at }} 112 </div> 113 </div> 114 <hr> 115 <div class="row"> 116 <div class="col-3"> 117 <strong>更新日時</strong> 118 </div> 119 <div class="col-9"> 120 {{ object.updated_at }} 121 </div> 122 </div> 123 <a class="btn btn-success mt-5 mb-3" href="{% url 'diary: diary _update' object.pk %}">編集 </a> 124 <a class="btn btn-danger mt-5 ml-2 mb-3" href="{% url 'diary: diary_delete' object.pk %}"> 削除</a> 125 126</div> 127{% endblock%} 128 129views.py----------------------------------------------------- 130import logging 131from .models import Diary 132from django.contrib.auth.mixins import LoginRequiredMixin 133# Create your views here. 134from django.urls import reverse_lazy 135from django.views import generic 136from.forms import InquiryForm 137from django.contrib import messages 138from .forms import InquiryForm,DiaryCreateForm 139 140class IndexView(generic.TemplateView): 141 template_name="index.html" 142 143logger=logging.getLogger(__name__) 144class InquiryView(generic.FormView): 145 template_name="inquiry.html" 146 form_class = InquiryForm 147 success_url = reverse_lazy('diary:inquiry') 148 def form_valid(self,form): 149 form.send_email() 150 messages.success(self.request,'メッセージを送信しました。') 151 logger.info('Inquiry sent by {}'.format(form.cleaned_data['name'])) 152 return super().form_valid(form) 153 154class DiaryListView(LoginRequiredMixin,generic.ListView): 155 model=Diary 156 template_name='diary_list.html' 157 paginate_by=2 158 159 def get_queryset(self): 160 diaries=Diary.objects.filter(user=self.request.user).order_by('-created_at') 161 return diaries 162 163class DiaryDetailView(LoginRequiredMixin,generic.DetailView): 164 model=Diary 165 template_name='diary_detail.html' 166 167class DiaryCreateView(LoginRequiredMixin,generic.CreateView): 168 model = Diary 169 template_name = 'diary_create.html' 170 form_class = DiaryCreateForm 171 success_url = reverse_lazy('diary:diary_list') 172 173 def form_valid(self, form): 174 diary = form.save(commit=False) 175 diary.user = self.request.user 176 diary.save() 177 messages.success(self.request, '日記を作成しました') 178 return super().form_valid(form) 179 180 def form_invalid(self, form): 181 182 messages.error(self.request, "日記の作成に失敗しました") 183 return super().form_invalid(form) 184 185class DiaryUpdateView(LoginRequiredMixin, generic.UpdateView): 186 model = Diary 187 template_name = 'diary_update.html' 188 form_class = DiaryCreateForm 189 def get_success_url(self): 190 return reverse_lazy('diary: diary_detail', kwargs={'pk': self.kwargs['pk']}) 191 def form_valid(self, form): 192 messages.success(self.request, '日記を更新しました。') 193 return super().form_valid(form) 194 def form_invalid(self, form): 195 messages.error(self.request, "日記の更新に失敗しました。") 196 return super().form_invalid(form) 197 198class ĐiaryĐeleteView(LoginRequiredMixin, generic.DeleteView): 199 model = Diary 200 template_name = 'diary_delete.html' 201 success_url = reverse_lazy('diary: diary_list') 202 def delete(self, request, *args, **kwargs): 203 messages.success(self.request, "日記を削除しました。") 204 return super().delete(request, *args, **kwargs) 205 206urls.py-------------------------------------------- 207from django.urls import path 208from.import views 209app_name='diary' 210urlpatterns=[ 211 path('',views.IndexView.as_view(),name="index"), 212 path('inquiry/', views.InquiryView.as_view(),name="inquiry"), 213 path('diary_list/',views.DiaryListView.as_view(),name="diary_list"), 214 path('diary-detail/<int:pk>/',views.DiaryDetailView.as_view(),name="diary_detail"), 215 path('diary-create/',views.DiaryCreateView.as_view(),name="diary_create"), 216 path('diary-update/<int:pk>/',views.DiaryUpdateView.as_view(), name="diary_update"), 217 path('diary-delete/<int:pk>/',views.ĐiaryĐeleteView.as_view(), name="diary_delete"), 218]

試したこと

かなり長い時間考えましたが、何をすべきかもわかりませんでした。

補足情報(FW/ツールのバージョンなど)

python3.10
django4.1.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

html

1<a href="{% url ‘diary:diary_detail’diary.pk %}"> 2<!-- ↓ --> 3<a href="{% url 'diary:diary_detail' diary.pk %}">

シングルクォートがおかしい?ように思えるのと、
呼び出すURLnameとdiary.pkに半角空白を入れてください

これでおそらくURLは正しく動作します

公式サイトの説明

投稿2022/09/10 17:18

編集2022/09/10 17:21
sk-sora--ypi

総合スコア535

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

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

makun1010

2022/09/14 04:05

無事に解決しました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問