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

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

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

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

Python

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

Q&A

解決済

2回答

5310閲覧

DjangoでListViewを使ったら、フォームが表示されない。

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

Python

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

0グッド

0クリップ

投稿2019/10/29 21:43

編集2019/10/30 23:47

やりたいこと

DjangoでListViewを使ってリストを作成し、項目の絞り込みのためのフォームも設置したいです。
フォームは、bootstrap_formを用いて整形したいです。

問題点

ListViewを使わなかった時は、下記のように、テンプレート上に、

html

1#template.html 2<form action="" method="post"> 3{% csrf_token %} 4{% bootstrap_form search_form %} 5</form>

と書けば、うまく動いてくれました。
しかし、ListViewにして、views.pyで

python

1context['search_form'] = SearchForm,

と渡すと、

BootstrapError at /

Parameter "form" should contain a valid Django Form.

というエラーが出ます。

試したこと

https://stackoverflow.com/questions/19173586/error-loading-sample-django-bootstrap3-template
このあたりの情報が関係してくるのかと思いましたが、テンプレートで
{{search_form.as_p }}

{{search_form}}
とすると、全く何も表示されません。

コード

python

1# views.py 2from django.views.generic import ListView 3from .forms import SearchForm 4from .models import Question 5 6# 表示したいリストのview 7class QuestionListView(ListView): 8 9 model = Question 10 paginate_by = 30 11 def get_context_data(self, **kwargs): 12 context = super().get_context_data(**kwargs) 13 context['search_form'] = SearchForm,  14 return context

html

1<!--question_list.html-->> 2{% load bootstrap4 %} 3<form action="" method="post"> 4 {% csrf_token %} 5 {% bootstrap_form search_form %} 6</form>

python

1# forms.py 2class SearchForm(forms.Form): 3 search_text = forms.CharField( 4 label='Search', 5 required=True, 6 max_length=100, 7 help_text='required' 8 ) 9 10sorted_choice = ( 11 ('Newest', 'Newest'), 12 ('Recent activity', 'Recent activity'), 13 ('Most votes', 'Most votes'), 14 ('Most frequent', 'Most frequent'), 15) 16

お分かりの方、ご教示頂けますと幸いです。
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

大変申し訳ありません。
私のコードのミスが原因でした。

views.pyにおいて、

python

1# views.py 2context['search_form'] = SearchForm,

としていましたが、最後の「,」が不要でした。
これを取り除いたら、有効に機能しました。

投稿2019/10/31 13:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

例えばですが、listviewではなく、templateviewを使うというのはどうでしょうか。

python

1#views.py 2 3from django.views.generic import TemplateView 4 5class QuestionView(TemplateView): 6 template_name = '●●●.html' 7 8 def get_context_data(self, *args, **kwargs): 9 search_form = SearchForm() 10 question_list Question.objects.all()[:30] 11 12 context = { 13 'search_form': search_form, 14 'question_list': question_list, 15 } 16 return context

投稿2019/10/29 22:22

ak_suzuki

総合スコア194

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

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

退会済みユーザー

退会済みユーザー

2019/10/30 00:04

ご回答頂き、ありがとうございます。 TemplateViewで作り直してみたのですが、ListViewの時と同様のエラーが生じてしまいます。 BootstrapError at / Parameter "form" should contain a valid Django Form.
ak_suzuki

2019/10/30 21:48

SearchFormを定義しているforms.pyも開示していただけますか?
退会済みユーザー

退会済みユーザー

2019/10/30 23:47

forms.pyについて、追記しました。よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問