🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

Q&A

解決済

1回答

8411閲覧

python django TypeError: 'dict' object is not callable

nakku

総合スコア5

Django

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

0グッド

0クリップ

投稿2021/02/13 15:44

編集2021/02/13 15:54

前提・実現したいこと

作成したフォーム画面からの入力情報をターミナルに表示できるようにしたいです。

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

作成したフォームから適当に情報を入力して返信しようとするとターミナルに以下のようなエラー画面が出てきます。

TypeError: 'dict' object is not callable

views.py

python

1from django.shortcuts import redirect 2from django.template.loader import render_to_string 3from django.urls import reverse_lazy 4from django.views import generic 5from django.core.mail import send_mail 6from .forms import ContactForm 7 8 9# Create your views here. 10class Top(generic.FormView): 11 form_class = ContactForm 12 success_url = reverse_lazy("contact:thanks") 13 template_name = "contact/top.html" 14 15 def form_valid(self, form): 16 subject = "お問合せがありました" 17 message = render_to_string("contact/mail.txt", form.cleaned_data,self.request) 18 19 name = form.cleaned_data.get("name") 20 email = form.cleaned_data.get("email") 21 text = form.cleaned_data.get("text") 22 category = form.cleaned_data("category") 23 return redirect("contact:thanks") 24 25class Thanks(generic.TemplateView): 26 template_name = "contact/thanks.html"

###forms.py

python

1from django import forms 2 3class ContactForm(forms.Form): 4 CATEGORIES = ( 5 ("1", "お仕事の依頼"), 6 ("2", "サイト内容に関するお問合せ"), 7 ) 8 9 name = forms.CharField( 10 label="お名前", max_length=50, 11 required=False, help_text="*任意" 12 ) 13 email = forms.EmailField( 14 label="メールアドレス", required=False, help_text="*任意" 15 ) 16 text = forms.CharField(label="お問合せ内容", widget=forms.Textarea) 17 category = forms.ChoiceField(label="カテゴリ", choices=CATEGORIES)

###mail.txt

python

1{% if name %}{{ name }}さんから{% else %}匿名{% endif %} 2 3{% if category == "1" %}仕事{% elif category == "2" %}サイト内容のお問合せ{% endif %} 4 5{{ text }} 6 7{{ email }}

試したこと

調べて見たら[]を使うところを()を使ったことが原因で起こるエラーみたいなのですが、特にそういう部分は見当たりませんでした。
またpycharmを使っているのですがviews.pyの5行目のimportに対してUnused import statement 'from django.core.mail import send_mail'と警告が出ています。
form_valid関数の変数に対しは、ローカル変数〜の値は使用されていません。と警告文が出ています。

おそらくこれらが原因だとは思うのですが、どうしていいか分からず質問させて頂きました。

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

python 3.8.2
django 3.1.6
macos

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

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

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

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

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

guest

回答1

0

ベストアンサー

どうしていいか分からず質問させて頂きました。

ブラウザに表示されているエラー情報(Traceback)をきちんと読みましょう。
意味のない情報が出ているわけではありません。
views.pyの下記の部分がおかしいと濃い灰色で表示されているはずです。

python

1category = form.cleaned_data("category")

そのため下記のように修正してみてはいかがでしょうか。

python

1category = form.cleaned_data.get("category")

投稿2021/02/14 02:39

errormaker74

総合スコア230

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

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

nakku

2021/02/14 12:25 編集

ありがとうございます、修正したらエラーが解消されました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問