我第一次嘗試創建一個小Django應用程序。它只是一個基本頁面,有兩種形式,一種是從數據庫返回值(運行良好)的搜索表單,另一種是插入表單(問題)。在插入表單中,有三個文本字段要求數據庫中新行的值。該應用程序被稱爲「搜索者」。這裏是我的代碼:沒有返回HttpResponse對象。到底是怎麼回事?
views.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),
)
錯誤是說:「在ValueError錯誤/測試/插入視圖searcher.views.insert沒有返回HttpResponse對象。「作爲我提交插入表單的結果。
我明白錯誤在說什麼:對不起,但views.py中的所有視圖必須返回要顯示的內容。
首先這是爲什麼?
第二,完成插入表單的正確方法是什麼?目前我已經設置了表單action =「/ test/insert /」,這樣在urls.py中就可以識別插入表單被提交併調用函數insert,應該如何調用該函數?
事情是,我希望這個插入函數可以被認爲是完全服務器端,所以它就像:「在觸發器上,做這個服務器端函數」。現在我想知道如何使用我正在使用的方法來運行該函數,但稍微改變一下以防止出現錯誤?當然,有一種運行函數的方式,不必每次都返回一個HttpResponse,這是一場噩夢(我來自PHP世界)! views.py絕對是放置這種功能的正確地方嗎?我的意思是,它是一個完整的函數返回SEE的文件。 – user2800761
也許你想通過HTTP做一些其他的事情 - 使用javascript做一個Ajax調用(通過XmlHttpRequest發佈) - 請參閱我的答案中的第二個鏈接 – blueberryfields
對不起,很煩人,但如果我不希望它是AJAX?非常感謝您的幫助。 – user2800761