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

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

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

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

Python 3.x

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

1回答

497閲覧

djangoのtemplete,urlsに関するエラー。index.htmlが開けない

umepon0626

総合スコア21

Django

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

Python 3.x

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2019/02/23 23:17

ただいま、djangoのチュートリアルを真似て、オリジナルのwebアプリケーションを作りながら勉強中の初心者です。
機能としてはslackapiを使ってリプの多いスレッドを取り出してdbに保存、表示するものです。

from django.db import models class ParentThread(models.Model): text = models.CharField(max_length=3000) ParentUser = models.CharField(max_length=20) # thread_ts = models.Charafield() def __str__(self): return self.text class ReplyThread(models.Model): text = models.CharField(max_length=3000) parentthread = models.ForeignKey(ParentThread,on_delete=models.CASCADE,null=True) ReplyUser = models.CharField(max_length=20) def __str__(self): return self.text

という感じでモデルを作っています。
そこでindex.htmlからスレッドのtextをクリックするとdetail.htmlにとびリプが見られる感じです。そこで下のような感じでview,urls,templeteを書いたところ

views.py

1from django.shortcuts import render 2from django.http import HttpResponse 3from .models import ParentThread,ReplyThread 4 5def index(request): 6 parent_thread_list = ParentThread.objects 7 context = {'parent_thread_list': parent_thread_list} 8 return render(request,'timeline_memory/index.html',context) 9 10 11def detail(request,parentthread_id): 12 parentthread = ParentThread.objects.get(pk=parentthread_id) 13 context = {'parentthread': parentthread} 14 return render(request,'timeline_memory/detail.html',context) 15 16import requests 17import json 18from datetime import * 19 20SLACK_CHANNEL_ID = '********' 21SLACK_URL = "https://slack.com/api/channels.history" 22SLACK_URL2 = "https://slack.com/api/channels.replies" 23TOKEN = "*************************************************" 24ts_list = [] 25 26def select_thread(): 27 payload = { 28 "channel": SLACK_CHANNEL_ID, 29 "token": TOKEN 30 } 31 response = requests.get(SLACK_URL, params=payload) 32 json_data = response.json() 33 msgs = json_data['messages'] 34 for i in msgs: 35 if 'reply_count' in i: 36 # if i['reply_count'] > 5: 37 ts_list.insert(0,i['ts']) 38 39#↑返信件数の多いスレッドのtsを取得 40 41 42def get_reply(TIMESTAMP): 43 payload2 = { 44 "channel": SLACK_CHANNEL_ID, 45 "token": TOKEN, 46 "thread_ts": TIMESTAMP 47 } 48 49 response2 = requests.get(SLACK_URL2, params=payload2) 50 json_data2 = response2.json() 51 msgs2 = json_data2['messages'] 52 for i in msgs2: 53 if 'reply_count' in i: 54 thread = ParentThread(text=i['text'],ParentUser=i['user']) 55 thread.save() 56 else: 57 thread.replythread_set.create(text=i['text'],ReplyUser=i['user']) 58 59 60 61 62def act(request): 63 64 # if __name__ == '__main__': 65 select_thread() 66 for i in ts_list: 67 get_reply(i) 68 return HttpResponse('succes.') 69 70 71

urls.py

1from django.urls import path 2from . import views 3 4app_name = 'timeline_memory' 5urlpatterns = [ 6 path('', views.index, name='index',), 7 path('<int:parentthread_id>/', views.detail, name='detail',), 8 path('act', views.act, name='act',), 9] 10

index.html

1<ul> 2 {% for thread in parent_thread_list.all %} 3 <li><a href="{% url 'timeline_memory:detail' parentthread.id %}">{{thread}}</a></li> 4 {% endfor %} 5</ul>

detail.html

1<h1>{{parentthread.text}}</h1> 2<ol> 3 {%for reply in parentthread.replythread_set.all%} 4 <li>{reply.text}</li> 5 {%endfor%} 6</ol>
Environment: Request Method: GET Request URL: http://127.0.0.1:8000/timeline_memory/ Django Version: 2.1.7 Python Version: 3.7.2 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'timeline_memory.apps.TimelineMemoryConfig'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Template error: In template C:\Users\temec\Documents\env1\django_practice\code_life_talk_memory\timeline_memory\templates\timeline_memory\index.html, error at line 3 Reverse for 'detail' with arguments '('',)' not found. 1 pattern(s) tried: ['timeline_memory/(?P<parentthread_id>[0-9]+)/$'] 1 : <ul> 2 : {% for thread in parent_thread_list.all %} 3 : <li><a href=" {% url 'timeline_memory:detail' ParentThread.id %} ">{{thread}}</a></li> 4 : {% endfor %} 5 : </ul> Traceback: File "C:\Users\temec\Documents\env1\lib\site-packages\django\core\handlers\exception.py" in inner 34. response = get_response(request) File "C:\Users\temec\Documents\env1\lib\site-packages\django\core\handlers\base.py" in _get_response 126. response = self.process_exception_by_middleware(e, request) File "C:\Users\temec\Documents\env1\lib\site-packages\django\core\handlers\base.py" in _get_response 124. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\temec\Documents\env1\django_practice\code_life_talk_memory\timeline_memory\views.py" in index 8. return render(request,'timeline_memory/index.html',context) File "C:\Users\temec\Documents\env1\lib\site-packages\django\shortcuts.py" in render 36. content = loader.render_to_string(template_name, context, request, using=using) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\loader.py" in render_to_string 62. return template.render(context, request) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\backends\django.py" in render 61. return self.template.render(context) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\base.py" in render 171. return self._render(context) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\base.py" in _render 163. return self.nodelist.render(context) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\base.py" in render 937. bit = node.render_annotated(context) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\base.py" in render_annotated 904. return self.render(context) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\defaulttags.py" in render 209. nodelist.append(node.render_annotated(context)) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\base.py" in render_annotated 904. return self.render(context) File "C:\Users\temec\Documents\env1\lib\site-packages\django\template\defaulttags.py" in render 442. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) File "C:\Users\temec\Documents\env1\lib\site-packages\django\urls\base.py" in reverse 90. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File "C:\Users\temec\Documents\env1\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix 622. raise NoReverseMatch(msg) Exception Type: NoReverseMatch at /timeline_memory/ Exception Value: Reverse for 'detail' with arguments '('',)' not found. 1 pattern(s) tried: ['timeline_memory/(?P<parentthread_id>[0-9]+)/$'] ```index.htmlを表示させようとしてhttp://127.0.0.1:8000/timeline_memory/にアクセスすると、Reverse for 'detail' with arguments '('',)' not found. 1 pattern(s) tried: ['timeline_memory/(?P<parのエラーが出てしまいます。 django = 2.1.7です。 1日調べてもわからなかったので質問させていただきました。回答お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

<ul> {% for thread in parent_thread_list.all %} <li><a href="{% url 'timeline_memory:detail' parentthread.id %}">{{thread}}</a></li> {% endfor %} </ul>

detailに渡しているのがparentthread.idになっていますがこれに正しい値が入っていない気がします。
正しくはthread.idでそれぞれのthreadのIDを引数として渡すのが正しいのでは無いでしょうか。

<ul> {% for thread in parent_thread_list.all %} <li><a href="{% url 'timeline_memory:detail' thread.id %}">{{thread}}</a></li> {% endfor %} </ul>

投稿2019/02/24 00:05

alpaka

総合スコア170

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

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

umepon0626

2019/02/24 07:52

ありがとうございました!無事解決いたしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問