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

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

詳細はこちら
Django

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

Python 3.x

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

MacOS(OSX)

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

Q&A

解決済

1回答

2545閲覧

Django pythonでNoReverseMatch atとエラーが出ます。

Mario_11

総合スコア95

Django

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

Python 3.x

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

MacOS(OSX)

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

0グッド

0クリップ

投稿2020/01/07 01:21

Django pythonでNoReverseMatch atとエラーが出ます。
https://medium.com/@kjmczk/django-contact-form-5a35d43b00a6
こちらのサイトを参考にお問い合わせフォームを作成したのですが、NoReverseMatchのエラーが出ます。

veiws.py

python

1class ContactFormView(FormView): 2 template_name = 'contact/contact_form.html' 3 form_class = ContactForm 4 success_url = reverse_lazy('contact_result') 5 6 def form_valid(self, form): 7 form.send_email() 8 return super().form_valid(form) 9 10 11class ContactResultView(TemplateView): 12 template_name = 'contact/contact_result.html' 13 14 def get_context_data(self, **kwargs): 15 context = super().get_context_data(**kwargs) 16 context['success'] = "お問い合わせは正常に送信されました。" 17 return context

forms.py

python

1class ContactForm(forms.Form): 2 name = forms.CharField( 3 label='', 4 max_length=100, 5 widget=forms.TextInput(attrs={ 6 'class': 'form-control', 7 'placeholder': "お名前", 8 }), 9 ) 10 email = forms.EmailField( 11 label='', 12 widget=forms.EmailInput(attrs={ 13 'class': 'form-control', 14 'placeholder': "メールアドレス", 15 }), 16 ) 17 message = forms.CharField( 18 label='', 19 widget=forms.Textarea(attrs={ 20 'class': 'form-control', 21 'placeholder': "お問い合わせ内容", 22 }), 23 ) 24 25 def send_email(self): 26 subject = "お問い合わせ" 27 message = self.cleaned_data['message'] 28 name = self.cleaned_data['name'] 29 email = self.cleaned_data['email'] 30 from_email = '{name} <{email}>'.format(name=name, email=email) 31 recipient_list = [settings.EMAIL_HOST_USER] # 受信者リスト 32 try: 33 send_mail(subject, message, from_email, recipient_list) 34 except BadHeaderError: 35 return HttpResponse("無効なヘッダが検出されました。") 36

urls.py

python

1app_name = 'register' 2 3urlpatterns = [ 4 path('contact/', views.ContactFormView.as_view(), name='contact_form'), 5 path('contact/result/', views.ContactResultView.as_view(), name='contact_result'),

html

1<!-- contact/contact_form.html --> 2 3{% extends "register/base.html" %} 4 5{% block content %} 6<div class="container"> 7 <div class="row"> 8 <div class="col-md-8"> 9 <h1>お問い合わせ</h1> 10 <p>お問い合わせフォームです。</p> 11 <form method="POST">{% csrf_token %} 12 {{ form.as_p }} 13 <button type="submit" class="btn btn-primary">送信</button> 14 </form> 15 </div> 16 </div> 17</div> 18{% endblock %} 19 20 21<!-- contact/contact_result.html --> 22 23{% extends "register/base.html" %} 24 25{% block content %} 26{{ context }} 27{% endblock %}

error

1Reverse for 'contact_result' not found. 'contact_result' is not a valid view function or pattern name. 2

です。
Python 3.7.4
Django 3.0.2です。
ちなみにお問い合わせ内容は送ることはできます。直接入力でcontact/resultのページ画面も表示できました。
お問い合わせフォームから送信ボタンを押すとNoReverseMatchのエラーが出ます。
Django 3.0 メールを送信する
よろしくお願いいたします。

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

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

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

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

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

tatamyiwathy

2020/01/07 02:42

success_url = reverse_lazy('register:contact_result')ではどうでしょうか。
Mario_11

2020/01/07 03:42

しっかりと移動できました!ありがとうございます。
tatamyiwathy

2020/01/07 06:18

解決済みにしていただきますようお願いします。
guest

回答1

0

自己解決

python

1class ContactFormView(FormView): 2 template_name = 'contact/contact_form.html' 3 form_class = ContactForm 4 success_url = reverse_lazy('register:contact_result')#追加箇所 5 def form_valid(self, form): 6 form.send_email() 7 return super().form_valid(form) 8 9 10class ContactResultView(TemplateView): 11 template_name = 'contact/contact_result.html' 12 13 def get_context_data(self, **kwargs): 14 context = super().get_context_data(**kwargs) 15 context['success'] = "お問い合わせは正常に送信されました。" 16 return context

投稿2020/01/07 06:58

Mario_11

総合スコア95

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問