演習課題「間違い探し」
右の環境には、「myblog」プロジェクトに「diary」という1行掲示板が作成してあります。
この一覧ページに検索フォームを追加しましたが、エラーになってしまいます。どうやら、forms.pyに間違いがあるようです。
forms.pyのSearchFormを修正して、検索フォームが正常に動作するようにしてください。なお、検索フォームは、次のデータを扱うものとします。
- 変数名 : keyword
- データ型 : 文字列
- ラベル : '検索'
- 最大長 : 50
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、サーバーを起動し、問題文に関するページにアクセスできる状態にしてください。
#05:検索フォームを設置しよう
ここでは、掲示板アプリケーションに検索機能を追加します。そのため、投稿の一覧画面に検索フォームを追加します。そして、Djangoでフォームを使うための基本的な操作を理解しましょう。
- forms.py : フォームのクラスで、データ形式を定義する
- views.py : フォームオブジェクトをテンプレートに渡す
フォームから受け取ったデータを処理
- index.html: フォームを表示する
myapp/bbs/forms.pyfrom django import forms
class SearchForm(forms.Form):
keyword = forms.CharField(label='検索', max_length=100)
変更部分のみ記載
myapp/bbs/views.pyfrom .forms import SearchForm
def index(request):
searchForm = SearchForm(request.GET)
if searchForm.is_valid():
keyword = searchForm.cleaned_data['keyword']
articles = Article.objects.filter(content__contains=keyword)
else:
searchForm = SearchForm()
articles = Article.objects.all()
context = {
'message': 'Hello Django',
'articles': articles,
'searchForm': searchForm,
}
return render(request, 'bbs/index.html', context)
変更部分のみ記載
myapp/bbs/templates/bbs/index.html{% extends './base.html' %}
{% block content %}
<h1>paiza bbs</h1>
<p>{{ message }}</p>
{% if searchForm %}
<form action='{% url "bbs:index" %}' method='get'>
<div class='form-group'>
{{ searchForm }}
<input type="submit" class="btn btn-outline-primary" value="OK" />
<a href="{% url 'bbs:index' %}" class="btn btn-outline-secondary">クリア</a>
</div>
</form>
{% endif %}
- フォームを使う | Django documentation | Django
https://docs.djangoproject.com/ja/2.1/topics/forms/
- 検索フォームをでっちあげる - Python 開発ノート - アットウィキ
https://www58.atwiki.jp/conn1/pages/26.html
- Django フォームの基本 - Python 入門
https://python.keicode.com/django/form-basic.php