初めて、小さな django アプリケーションを作成しようとしています。これは、データベースから値を返す検索フォーム (うまく機能) と挿入フォーム (問題) の 2 つのフォームを持つ単なる基本的なページです。挿入フォームには、データベースの新しい行の値を求める 3 つのテキスト フィールドがあります。アプリは「サーチャー」と呼ばれます。これが私のコードです:
ビュー.py
from django.http import HttpResponse
from django.template import Context
from django.template.loader import get_template
from searcher.models import Publisher
from django.db.models import Q
def search(request):
if "search" in request.GET:
value = request.GET['search']
results = Publisher.objects.filter(Q(city__contains=value) | Q(name__contains=value))
else:
value = "No term"
results = []
template = get_template("base.html")
html = template.render(Context({"value":value, "results":results}))
return HttpResponse(html)
def insert(request):
if "name" in request.POST:
for key in request.POST:
counter = 0
if key != '':
counter = counter + 1
if counter == len(request.POST):
row = Publisher(name=request.POST['name'], city=request.POST['city'], website=request.POST['website'])
row.save()
base.html
<html>
<body>
<form method = "GET" action = "">
<input type = "text" name = "search"><input type = "submit">
</form><br>
you searched for:{{value}}<br>
your results:
{% for result in results %}
<br>{{result}}<br>
{% endfor %}
<br><br>
<form method = "POST" action = "/test/insert/">
<input type = "text" name = "name" value = "name"><br>
<input type = "text" name = "city" value = "city"><br>
<input type = "text" name = "website" value = "website"><br>
<input type = "submit">
</form>
</body>
</html>
urls.py
from django.conf.urls import patterns, include, url
from searcher import views
urlpatterns = patterns('',
url(r'^test/$', views.search),
url(r'^test/insert/$', views.insert),
)
エラーは、「/test/insert の ValueError ビュー searcher.views.insert は HttpResponse オブジェクトを返しませんでした」と言っています。私が挿入フォームを提出した結果として。
エラーの意味は理解できます: 申し訳ありませんが、views.py 内のすべてのビューは表示するものを返さなければなりません。
まず、これはなぜですか?
そして第二に、挿入フォームを達成する正しい方法は何ですか? 現在、フォーム action = "/test/insert/" を設定して、urls.py で挿入フォームが送信されたことを認識し、insert 関数を呼び出すことができるようにしましたが、代わりにどのように関数を呼び出す必要がありますか?