我遇到与此处提到的问题类似的问题Very simple user input in django
我从上面的解决方案中获取了代码示例,但我仍然遇到同样的问题。当我点击calculate
提交按钮时,表单就会清除,而不会将我带到结果视图。
我确定这是一个小问题,但我已经坚持了一段时间,并且可以提供一些帮助。我将在下面发布相关代码:
views.py:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request, 'form.html')
def result(request):
if request.method == "POST":
number1 = request.POST.get("firstnumber", None)
number2 = request.POST.get("secondnumber", None)
answer = number1 + number2
message = "The result of number1 + number2 is " + answer
else:
message = "You submitted an empty form"
return HttpResponse(message)
form.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="POST" action="/calculator/">
{% csrf_token %}
Enter number 1: <br>
<input type="text" name="firstnumber">
<br>
Enter number 2: <br>
<input type="text" name="secondnumber">
<br>
<input type="submit" value="Calculate">
</form>
</body>
</html>
计算器\ urls.py:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^$', views.result, name='result'),
]
exercise4 \ urls.py:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^calculator/', include('calculator.urls')),
url(r'^admin/', admin.site.urls),
]
答案 0 :(得分:2)
提交表单后,您需要
<form method="POST" action="/calculator/">
这是index
视图,因为在calculator\urls.py
中你有
url(r'^$', views.index, name='index'),
并且所有这样的视图都返回与表单本身相同的页面。
使表单指向适当的视图(即result
)
<form method="POST" action="/calculator/result/">
并在calculator\urls.py
url(r'^result/$', views.result, name='result'),
但是,不如何在django(通常)中处理表单。
通常,表单由同一视图处理,该视图区分是使用HTTP POST方法还是使用HTTP GET调用它。
在前一种情况下,视图处理提交的数据(执行数据验证作为其第一步)。在后者中,它返回带有表单的页面(即索引视图现在正在执行的操作)。
请花点时间仔细阅读专门处理Django's website
表格的优秀官方网页