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

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

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

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

Python

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

Q&A

2回答

4129閲覧

Django DetailViewクラスの関数でrequestを引数として渡せない

tomaa

総合スコア84

Django

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

Python

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

0グッド

0クリップ

投稿2020/03/28 13:54

編集2020/03/29 16:10

前提・実現したいこと

Django,python3でWEBシステムを開発しています。

DetailViewのクラスの中で、sessionを取得するための関数を使用したいのですが、その関数にrequestを引数として渡す事ができず、動かす事ができません。

以下に紹介しているコードで紹介している関数を利用するためには、どのようにすれば良いでしょうか?

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

TypeError at /detail/41/ check_session() missing 1 required positional argument: 'request'

該当のソースコード

views.py

python

1class DetailView(LoginRequiredMixin, generic.DetailView): 2 model = sampleDB 3 template_name = 'detail.html' 4 5 def check_session(self, request): 6 if not 'history' in request.session: 7 request.session['history'] = {'user': self.request.user, 'id': self.kwargs['pk']} 8 9 def get_context_data(self, **kwargs): 10 self.check_session() 11 context = super().get_context_data(**kwargs) 12 return context 13

project/urls.py

python

1from django.contrib import admin 2from django.contrib.staticfiles.urls import static 3from django.urls import path, include 4 5 6urlpatterns = [ 7 path('admin/', admin.site.urls), 8 path('', include('main.urls')), 9 path('accounts/', include('allauth.urls')), 10]

main/urls.py

python

1from django.urls import path 2from . import views 3 4app_name = 'main' 5urlpatterns = [ 6 path('', views.WelcomeView.as_view(), name='welcome'), 7 path('home/', views.HomeView.as_view(), name='home'), 8 path('detail/<int:pk>/', views.DetailView.as_view(), name='detail'), 9 path('detail_edit/<int:pk>/', views.DetailEditView.as_view(), name='detail_edit'), 10 path('resister_history/', views.ResisterHistoryView.as_view(), name='resister_history'), 11 path('resister_vegetable/', views.ResisterVegetableView.as_view(), name='resister_vegetable'), 12 path('delete/<int:pk>/', views.DeleteView.as_view(), name='delete'), 13 path('inquiry_login/', views.InquiryLoginView.as_view(), name='inquiry_login'), 14 path('inquiry/', views.InquiryView.as_view(), name='inquiry'), 15 16 path('404/', views.Error404View.as_view(), name='404'), 17 path('403/', views.Error403View.as_view(), name='403'), 18 path('500/', views.Error500View.as_view(), name='500'), 19 20]

detail.html

html

1{% extends "layout/layout_home.html" %} 2{% load custom_tags %} 3 4{% block title %} 5Detail 6{% endblock %} 7 8{% block content %} 9 10<!-- page content --> 11<div class="right_col" role="main"> 12 <div class=""> 13 <div class="page-title"> 14 <div class="title_left"> 15 <h3>登録情報 </h3> 16 </div> 17 </div> 18 <div class="clearfix"></div> 19 <div class="row"> 20 <div class="col-lg-6 offset-lg-3"> 21 22 <div class="x_panel"> 23 <div class="x_title"> 24 <h2 style="color: #2B2B2B; font-weight: bold">{{ object.name }}  </h2> 25 <h2 style="color: #2B2B2B; font-weight: bold">{% none_to_blank object.type %}  </h2> 26 <h2 style="color: #2B2B2B; font-weight: bold">{{ object.name }}  </h2> 27 <h2 style="color: #2B2B2B; font-weight: bold">{% none_to_blank object.variety %}  </h2> 28 <ul class="nav navbar-right panel_toolbox"> 29 <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a> 30 31 </li> 32 <li class="dropdown"> 33 <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" 34 aria-expanded="false"><i class="fa fa-wrench"></i></a> 35 <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> 36 <a class="dropdown-item" href="#">Settings 1</a> 37 <a class="dropdown-item" href="#">Settings 2</a> 38 </div> 39 </li> 40 <li><a class="close-link"><i class="fa fa-close"></i></a> 41 </li> 42 </ul> 43 <div class="clearfix"></div> 44 </div> 45 <div class="x_content"> 46 47 <p>登録日:{{ object.created_at }}  更新日:{{ object.updated_at }} </p> 48 <div class="x_content"> 49 <a href="{% url 'main:detail_edit' object.pk %}"> 50 <button type="button" 51 class="btn btn-success btn-m ">編集 52 </button> 53 </a> 54 <a href="{% url 'main:resister_history'%}"> 55 <button type="button" 56 class="btn btn-primary btn-m ">収穫履歴を保存 57 </button> 58 </a> 59 <a href="{% url 'main:delete' object.pk %}"> 60 <button type="button" 61 class="btn btn-danger btn-m ">削除 62 </button> 63 </a> 64 </div> 65 </div> 66 </div> 67 </div> 68 </div> 69 </div> 70</div> 71{% endblock %}

追記④

print()テスト

def get(self, request, *args, **kwargs): req = request pk = self.kwargs.get('pk') # urls.pyでpkに格納した値を取り出す。 if pk: req.session['history'] = pk # セッションに'history'という名前のキーで保存する。 print('test①') return render(req, 'detail.html') def get_context_data(self, **kwargs): print('test②') # self.get() context = super().get_context_data(**kwargs) context['pk'] = self.kwargs.get('pk') print('test③') print(context['pk']) return context

コンソール

test①

追記③

多くのご協力をいただき、解決はできていないですが、色々参考になる事がありました。

下記のコードで動かすと、最初はエラーが出ている箇所が、最初のget(self, request, *args, **kwargs):だと思っていましたが、
print()を追加して確認すると、




までは表示されます。
request.session['history']にPKの値が入っている事も確認できます。

ただ、return super().get(request, *args, **kwargs)のところでエラーが出てしまいます。
そこで、シンプルにreturnするものを、request.session['history']にしようと思ってもエラーが出てしまいます。

def get(self, request, *args, **kwargs): pk = self.kwargs.get('pk') # urls.pyでpkに格納した値を取り出す。 print('①') if pk: request.session['history'] = pk # セッションに'history'という名前のキーで保存する。 print('②') print('③') return super().get(request, *args, **kwargs) print('finish') def get_context_data(self, **kwargs): self.get() context = super().get_context_data(**kwargs) return context

エラーコード

TypeError at /detail/41/ get() missing 1 required positional argument: 'request'

追記②

self.check_session(self.request)

とすると、requestは引数として渡っているようですが、別のエラーが発生します。

TypeError at /detail/41/ Object of type CustomUser is not JSON serializable

追記①

以下のサイトの方法を試しましたがうまく動作しませんでした(やはりrequestを引数に渡す必要があります)
Django URLパラメータをセッションに保存してテンプレートで利用する

TypeError at /detail/41/ get() missing 1 required positional argument: 'request'

python

1class DetailView(LoginRequiredMixin, generic.DetailView): 2 model = sampleDB 3 template_name = 'detail.html' 4 5 def get(self, request, *args, **kwargs): 6 pk = self.kwargs.get('pk') # urls.pyでpkに格納した値を取り出す。 7 if pk: 8 request.session['history'] = pk # セッションに'history'という名前のキーで保存する。 9 return super().get(request, *args, **kwargs) 10 11 def get_context_data(self, **kwargs): 12 self.get() 13 context = super().get_context_data(**kwargs) 14 return context

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

●開発環境

  • Python: 3.7.5
  • Django: 2.2.2

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

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

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

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

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

netsuy

2020/03/30 06:58

すみません状況が整理できないのですが、現状の問題点はなんでしょうか? ぱっとみ、sessionに入れたいのであれば 追記④の通り、getメソッドのその記述で問題ないようにみえるのですが。
tomaa

2020/03/30 07:26 編集

コメントありがとうございます。 一番の目的はsessionを使いたい事です。 その時には、requestを引数に渡す必要があるみたいで、その渡し方でつまずいています。 追記④の場合、#self.get()のコメントアウトを外すと、return render(req, 'detail.html')のところで、reqという変数にしているrequestが渡せず、エラーがでます。 追記③の場合も、 return super().get(request, *args, **kwargs)のところで、requestが渡せずエラーになります。それまでのコードは動いており、sessionを作れているので、最後のreturnできれば問題ないと思うのですが、、、 もし可能なら、追記③のコードをベースにsessionを使いたいと思っています(追肥④は動作テストのためのコードのため)。
netsuy

2020/03/30 08:06 編集

>追記④の場合、#self.get()のコメントアウトを外すと、return render(req, 'detail.html')のところで、reqという変数にしているrequestが渡せず、エラーがでます。 self.get()をしなくても(コメントアウトのままでも)getメソッド呼ばれていませんか?
tomaa

2020/03/30 08:13

はい、そのとおりです。 そして、def get(self, request, *args, **kwargs):を全てコメントアウトすると、 def get_context_data(self, **kwargs):が動きます。 そして、def get(self, request, *args, **kwargs):を全てコメントアウトしないと、エラーが発生して、def get_context_data(self, **kwargs):までコードが進みません。
guest

回答2

0

まずは、view.pyのdef get_context_data(self, **kwargs):を

python

1 def get_context_data(self, **kwargs): 2 self.get() 3 context = super().get_context_data(**kwargs) 4 context['pk'] = self.kwargs.get('pk') 5 return context

にしてください。これで、pkにpkの値を入れてテンプレートへ渡します。

その後、base.htmlの該当箇所を下記のように変えてください。

html

1a href="{% url 'main:detail_edit' pk %}">

試してないので、できなかったら教えてください。

投稿2020/03/29 13:36

llr114

総合スコア203

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

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

tomaa

2020/03/29 13:43

回答ありがとうございます。 ご紹介していただいた内容で試してみたのですが、同じエラーとなってしまいます。 NoReverseMatch at /detail/41/ Reverse for 'detail_edit' with arguments '('',)' not found. 1 pattern(s) tried: ['detail_edit/(?P<pk>[0-9]+)/$']
llr114

2020/03/29 13:46

多少ゴリ押しですが context['pk'] = self.kwargs.get('pk') を context['pk'] = {pk:self.kwargs.get('pk')} に変えて、 <a href="{% url 'main:detail_edit' pk %}"> を <a href="{% url 'main:detail_edit' pk.pk %}"> に変えたらどうでしょうか、、、?
tomaa

2020/03/29 13:52

試してみました。 同じエラーでした。
tomaa

2020/03/29 13:54

ちなみに、関係ないかもですが、最初の回答の a href="{% url 'main:detail_edit' pk %}">のパターンで、 detail_edit'とpkの間のスペースをなくして、detail_edit'pk でやってみると、 TemplateSyntaxError at /detail/41/ Could not parse the remainder: 'pk' from ''main:detail_edit'pk' とエラーが変わりました。
llr114

2020/03/29 14:45

return contextの直前で、 print(context['pk'])したら何がprintされますか?
tomaa

2020/03/29 14:52

何も表示されません。 print('test') print(context['pk']) return context としましたが、testも表示されません。
llr114

2020/03/29 14:58

確認している場所はどこでしょうか? Webサイト上には表示されないので、ログを確認していただければ少なくともtestは表示されると思います。
tomaa

2020/03/29 15:11

追記④に書いたのですが、 print('test') print(context['pk']) return context が表示されないのは、def get(self, request, *args, **kwargs):が、def get_context_data(self, **kwargs):の前に動いてしまって、エラーが出てコードの進行が止まって事が関係していますでしょうか? 試しに、def get_context_data(self, **kwargs):内のself.get()をコメントアウトしましたが、それでもtest①は表示され、その後のtest②以降は表示されません
tomaa

2020/03/29 15:18

そして、def get(self, request, *args, **kwargs):を全てコメントアウトすると、 test② test③ 41 と表示されます。
llr114

2020/03/29 15:21

有難うございます。 <a href="{% url 'main:detail_edit' pk %}"> を削除してもエラーは出ますか?
llr114

2020/03/29 15:21

あ、そしたら urls.pyの追記もお願いしていいですか?
tomaa

2020/03/29 15:34

<a href="{% url 'main:detail_edit' pk %}">を消してもエラー出ます。 urls.pyを追記しました。 ご確認のほどよろしくお願いします。
llr114

2020/03/29 15:39

あれ、今って先ほどコメントさせていただいた 「return super().get(request, *args, **kwargs)をreturn render(req, 'detail.html')にしてみてください。」 って反映されてない状態ですか? 可能なら、return render(req, 'detail.html')でどこまでprint()が表示されるのかみてみたいです。
tomaa

2020/03/29 15:41

ずっと、return render(req, 'detail.html')の状態で試しています。
llr114

2020/03/29 15:50

一度、def get(self, request, *args, **kwargs): を def get(self, request, *args, **kwargs): print('test get') return render(request, 'detail.html') だけにしたもの、 detail.htmlを {% extends "layout/layout_home.html" %} {% load custom_tags %} {% block title %} Detail {% endblock %} {% block content %} <div>test</div> {% endblock %} だけにしたものを交互にやって、エラー内容を教えてもらってもいいですか?
tomaa

2020/03/29 16:02

前者は、 NoReverseMatch at /detail/41/ Reverse for 'detail_edit' with arguments '('',)' not found. 1 pattern(s) tried: ['detail_edit/(?P<pk>[0-9]+)/$’] 後者は、エラーなしでした。
llr114

2020/03/29 16:06

detail.htmlにある <a href="{% url 'main:detail_edit' object.pk %}"> <a href="{% url 'main:resister_history'%}"> <a href="{% url 'main:delete' object.pk %}"> を <a href="{% url 'app:detail_edit' pk.pk %}"> <a href="{% url 'app:resister_history'%}"> <a href="{% url 'app:delete' pk.pk %}"> にしてみてください。 urls.pyでapp_name = 'app'にしているのに、mainになっているのが原因かもしれません。
tomaa

2020/03/29 16:09

申し訳ありません。 追記で書いていたのは間違いで、 実際のファイルは、urls.pyでapp_name = 'main'です。
llr114

2020/03/29 16:12

了解です。そしたら <a href="{% url 'main:detail_edit' object.pk %}"> <a href="{% url 'main:delete' object.pk %}"> を削除してエラーが出るか確認してください。 また、エラー画面を画像かなんかで追加していただけると助かります。
tomaa

2020/03/29 16:21

<a href="{% url 'main:detail_edit' object.pk %}"> <a href="{% url 'main:delete' object.pk %}"> を削除すると、エラーが変わりました。 TypeError at /detail/41/ unsupported operand type(s) for -: 'str' and 'datetime.timedelta' となるのですが、これは今回のエラーと直接関係ないですよね?
llr114

2020/03/29 16:27

おそらくそうかと思います。 エラーの際に、どこのファイルの何行目でエラーが出てる、との表示があると思うのですが、それの記述もお願いしていいですか?どの段階でのエラーなのか判断ができないです。
tomaa

2020/03/29 16:31

2020-03-30 01:30:12,343 [ERROR] /Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/utils/log.py(Line:228) Internal Server Error: /detail/41/ Traceback (most recent call last): File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/contrib/auth/mixins.py", line 52, in dispatch return super().dispatch(request, *args, **kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 97, in dispatch return handler(request, *args, **kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/harvest_timer/main/views.py", line 102, in get return render(req, 'detail.html') File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/shortcuts.py", line 36, in render content = loader.render_to_string(template_name, context, request, using=using) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 171, in render return self._render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render return self.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render return self.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render return self.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/defaulttags.py", line 309, in render return nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/library.py", line 192, in render output = self.func(*resolved_args, **resolved_kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/harvest_timer/main/templatetags/custom_tags.py", line 135, in get_progress_offset search_finish_day = today - timedelta(days=1) TypeError: unsupported operand type(s) for -: 'str' and 'datetime.timedelta' 2020-03-30 01:30:12,346 [ERROR] /Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/core/servers/basehttp.py(Line:154) "GET /detail/41/ HTTP/1.1" 500 227357
tomaa

2020/03/29 16:31

長くて恐縮ですが、現在のエラーメッセージです。
llr114

2020/03/29 16:36

先に最初のエラーを解消してしまいましょう。 まず、これらを戻してください。 <a href="{% url 'main:detail_edit' pks.pk %}"> <a href="{% url 'main:delete' pks.pk %}"> view.pyのget()の context['pk'] = self.kwargs.get('pk') を context['pks'] = self.kwargs.get('pk') にします。 その後のreturn render(..)の直前に次を追加して、出力結果を教えてください。 print(self.kwargs.get('pk')) print(type(self.kwargs.get('pk')))
tomaa

2020/03/29 16:42

出力結果は、以下となります。 41 <class 'int'>
llr114

2020/03/29 17:00

エラーは同じものですか?
tomaa

2020/03/29 17:04

エラーは変わりました。
tomaa

2020/03/29 17:04

2020-03-30 02:02:00,613 [ERROR] /Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/utils/log.py(Line:228) Internal Server Error: /detail/41/ Traceback (most recent call last): File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/contrib/auth/mixins.py", line 52, in dispatch return super().dispatch(request, *args, **kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 97, in dispatch return handler(request, *args, **kwargs) File "/Users/apple/GoogleDrive/harvest_timer_django/harvest_timer/main/views.py", line 102, in get return render(req, 'detail.html') File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/shortcuts.py", line 36, in render content = loader.render_to_string(template_name, context, request, using=using) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 171, in render return self._render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render return self.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render return self.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render return self.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render bit = node.render_annotated(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated return self.render(context) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/template/defaulttags.py", line 443, in render url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/urls/base.py", line 90, in reverse return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File "/Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/urls/resolvers.py", line 668, in _reverse_with_prefix raise NoReverseMatch(msg) django.urls.exceptions.NoReverseMatch: Reverse for 'detail_edit' with arguments '('',)' not found. 1 pattern(s) tried: ['detail_edit/(?P<pk>[0-9]+)/$'] 2020-03-30 02:02:00,615 [ERROR] /Users/apple/GoogleDrive/harvest_timer_django/venv/lib/python3.7/site-packages/django/core/servers/basehttp.py(Line:154) "GET /detail/41/ HTTP/1.1" 500 227171
llr114

2020/03/29 17:17

元のエラーのままですね、、、 ごめんなさい、思いつかないのでちょっと考えてみます。
tomaa

2020/03/29 17:21 編集

元のままですか、、違うかと思ってました。 長い間、お付き合いいただき大変ありがとうございます。
guest

0

check_sessionを

python

1def check_session(self, **kwargs): 2 if not 'history' in self.request.session:

のようにしたらいかがでしょうか?

投稿2020/03/28 18:18

llr114

総合スコア203

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

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

tomaa

2020/03/28 23:02

ご回答ありがとうございます。 教えていただいた方法試しましたが、 NameError at /detail/41/ name 'request' is not defined と、エラーになってしまいます。
llr114

2020/03/29 05:58

追記1のコードの、 def get(self, request, *args, **kwargs): の一番最初(pk = self.kwargs.get('pk')の前)に、 req = self.requestを付け加えてエラーが出るか確認して頂けませんでしょうか?
llr114

2020/03/29 06:08

あ、req = self.requestではなくて、print(request)でお願いします。すみません。
tomaa

2020/03/29 06:09

コメントありがとうございます。 def get(self, request, *args, **kwargs): req = self.request print(req) このように変更してみましたが、 TypeError at /detail/41/ get() missing 1 required positional argument: 'request' このようにエラーが出てしまいます。 return super().get(request, *args, **kwargs)
llr114

2020/03/29 06:12

上記エラーが出る箇所はどこでしょうか? print自体はされるのでしょうか?
tomaa

2020/03/29 06:13

def get(self, request, *args, **kwargs): print(request) で行いました。 RecursionError at /detail/41/ maximum recursion depth exceeded while calling a Python object 今度はこのようなエラーが出ます。
tomaa

2020/03/29 06:16

すみません。print自体は動いています。 <WSGIRequest: GET '/detail/41/'> このようにコンソールに出ます。 しかしおそらく、100行近く表示されています。
llr114

2020/03/29 06:19

五月雨になってしまい申し訳ありません。 こちらだといかがでしょうか? def get(self, request, *args, **kwargs): req = request pk = self.kwargs.get('pk') # urls.pyでpkに格納した値を取り出す。 if pk: req.session['history'] = pk # セッションに'history'という名前のキーで保存する。 return super().get(request, *args, **kwargs)
tomaa

2020/03/29 06:20

すみません。さきほどの100行程度表示されるのは、def get_context_data(self, **kwargs):で self.get(self.request) としたときです。
tomaa

2020/03/29 06:22

def get_context_data(self, **kwargs):で self.get() としたときですと、1回だけ <WSGIRequest: GET '/detail/41/'> とコンソールに表示され、 TypeError at /detail/41/ get() missing 1 required positional argument: 'request' のエラーとなります。
tomaa

2020/03/29 06:26

def get(self, request, *args, **kwargs): req = request pk = self.kwargs.get('pk') # urls.pyでpkに格納した値を取り出す。 if pk: req.session['history'] = pk # セッションに'history'という名前のキーで保存する。 return super().get(request, *args, **kwargs) def get_context_data(self, **kwargs): self.get() こちら試しましたが、以下のエラーとなります。 TypeError at /detail/41/ get() missing 1 required positional argument: 'request'
llr114

2020/03/29 10:04

エラーが起こる場所は req = request でしょうか?
tomaa

2020/03/29 11:56

エラーは、 return super().get(request, *args, **kwargs) で起こっています。
llr114

2020/03/29 12:01

そこを return super().get(req, *args, **kwargs) にしたらいかがでしょうか?
tomaa

2020/03/29 12:04

同じエラーになります。エラーが起こる場所も同じです。
llr114

2020/03/29 12:22

return super().get(request, *args, **kwargs) を return render(req, 'detail.html') にしてみてください。
tomaa

2020/03/29 12:30

NoReverseMatch at /detail/41/ Reverse for 'detail_edit' with arguments '('',)' not found. 1 pattern(s) tried: ['detail_edit/(?P<pk>[0-9]+)/$'] のエラーとなりました。
llr114

2020/03/29 12:38

これはdetail.html上でのエラーでしょうか?
tomaa

2020/03/29 12:43

エラーを見ると、関係ありそうな場所は、return render(req, 'detail.html')となります。 urlpatternsで、 path('detail/<int:pk>/', views.DetailView.as_view(), name='detail'),としているので、rendarする時にpkも渡さないといけないのかなと思っています。
llr114

2020/03/29 12:46

なるほど。detail.htmlも一応追記していただいてもよろしいでしょうか?
tomaa

2020/03/29 12:53

その前にひとつ気になる事があるのですが、さきほどのエラーが、 Reverse for 'detail_edit' with arguments '('',)' not found. 1 pattern(s) tried: ['detail_edit/(?P<pk>[0-9]+)/$'] となっており、'detail_edit'も関係ありますでしょうか? detail_edit.htmlというテンプレートもあり、UpdateViewで使っています。
llr114

2020/03/29 13:00

detail.html上にdetail_editに関する箇所があるならば、そこの可能性があります。 ですので、一度detail.htmlを確認したいです。
tomaa

2020/03/29 13:02

了解しました。 質問に追記しました。ご確認のほどよろしくお願いします。
llr114

2020/03/29 13:08

<a href="{% url 'main:detail_edit' object.pk %}"> ここが原因な気がします。 おそらくobject.pkに値がないので、エラーが起きているんだと思います。 view.pyを修正すれば解決するかと思います。 新しく解答を作成しますね。
tomaa

2020/03/29 13:12

すみません。お手数お掛けします。
llr114

2020/03/29 13:13

因みに、pkっていうのは、sampleDBのそれぞれのデータのidでしょうか? そうなら、 <a href="{% url 'main:detail_edit' object.id %}"> でうまくいかないですかね? これでいけるならここだけ修正すればいいので。
tomaa

2020/03/29 13:34 編集

pkは、sampleDBのそれぞれのデータのidです。 ですので、<a href="{% url 'main:detail_edit' object.id %}">を試しましたが、同じエラーが出てしまいます。 同時に<a href="{% url 'main:delete' object.id %}">にしても、エラーとなります。
llr114

2020/03/29 13:34

わかりました。追加で回答作ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問