Django,html 模板,POST 提交表单不工作
Django, html template, POST submit form not working
这个表单中的'Submit'按钮,在这个Django项目中,好像没有做任何事情。我无法在代码或文件中发现逻辑错误。
sign.html(这是显示的页面)。单击提交按钮时,它什么也不做,但它应该填充数据库。
{% load static %}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="{% static 'guestbook/styles.css' %}">
</head>
<body>
<h1>Tell the world how you're doing!</h1>
<h2>Sign the guestbook</h2>
<form class="form-signin" method="POST" action="{% url 'sign' %}">
{% csrf_token %}
Enter your name:<br>
<!--<input type="text" name="name" placeholder="Your Name here">-->
{{form.name}}
<br>
Enter your comment:<br>
<!--<textarea name="message" type="Textarea" placeholder="Your comment here" rows="10" cols="30"></textarea>-->
{{form.comment}}
<br><br>
<input type="button" value="Submit">
</form>
<p>Go to the <a href="{% url 'index' %}"> guestbook </a> itself</p>
</body>
</html>
我怀疑问题出在下面的代码中或可能在 views.py 文件中,但由于它没有抛出任何异常,所以我找不到它。
下面的符号函数与这个问题相关。
views.py
from django.shortcuts import render
from .models import Comment
from .forms import CommentForm
# Create your views here.
def index(request):
comments = Comment.objects.order_by('-date_added')
context ={'comments': comments}
#name=Name.objects.order_by('-date_added')
#return render(request,'guestbook/index.html')
return render(request,'guestbook/index.html', context)
def sign(request):
if request.method=='POST':
form = CommentForm(request.POST)
if form.is_valid():
new_comment=Comment(name=request.POST['name'],comment=request.POST['comment'])
new_comment.save()
return redirect('index')
else:
form = CommentForm()
context={'form' : form}
return render(request,'guestbook/sign.html',context)
模型文件为要保存到数据库的名称和评论创建模型。
最后,models.py
from django.db import models
from django.utils import timezone
# Create your models here.
class Comment(models.Model):
name=models.CharField(max_length=20)
comments=models.TextField()
date_added=models.DateTimeField(default=timezone.now)
def __str__(self):
return self.name
"""
{% for c in comment %}
{% endfor %}
"""
一个表单是通过一个按钮提交的,里面的类型是submit
<form>
<!-- button goes here and input fields also -->
</form>
改变这个
<input type="button" value="Submit">
到
<input type="submit" value="Submit">
然后在views.py
更改此 new_comment=Comment(name=request.POST['name'],comment=request.POST['comment'])
至
new_comment = Comment()
new_comment.name = request.POST.get("name")
new_comment.comments = request.POST.get("comment")
new_comment.save()
你的post方法应该是这样的:
def sign(request):
if request.method=='POST':
form = CommentForm(request.POST)
if form.is_valid():
new_comment=form.save()
return redirect('index')
else:
form = CommentForm()
context={'form' : form}
return render(request,'guestbook/sign.html',context)
这个表单中的'Submit'按钮,在这个Django项目中,好像没有做任何事情。我无法在代码或文件中发现逻辑错误。
sign.html(这是显示的页面)。单击提交按钮时,它什么也不做,但它应该填充数据库。
{% load static %}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="{% static 'guestbook/styles.css' %}">
</head>
<body>
<h1>Tell the world how you're doing!</h1>
<h2>Sign the guestbook</h2>
<form class="form-signin" method="POST" action="{% url 'sign' %}">
{% csrf_token %}
Enter your name:<br>
<!--<input type="text" name="name" placeholder="Your Name here">-->
{{form.name}}
<br>
Enter your comment:<br>
<!--<textarea name="message" type="Textarea" placeholder="Your comment here" rows="10" cols="30"></textarea>-->
{{form.comment}}
<br><br>
<input type="button" value="Submit">
</form>
<p>Go to the <a href="{% url 'index' %}"> guestbook </a> itself</p>
</body>
</html>
我怀疑问题出在下面的代码中或可能在 views.py 文件中,但由于它没有抛出任何异常,所以我找不到它。
下面的符号函数与这个问题相关。
views.py
from django.shortcuts import render
from .models import Comment
from .forms import CommentForm
# Create your views here.
def index(request):
comments = Comment.objects.order_by('-date_added')
context ={'comments': comments}
#name=Name.objects.order_by('-date_added')
#return render(request,'guestbook/index.html')
return render(request,'guestbook/index.html', context)
def sign(request):
if request.method=='POST':
form = CommentForm(request.POST)
if form.is_valid():
new_comment=Comment(name=request.POST['name'],comment=request.POST['comment'])
new_comment.save()
return redirect('index')
else:
form = CommentForm()
context={'form' : form}
return render(request,'guestbook/sign.html',context)
模型文件为要保存到数据库的名称和评论创建模型。
最后,models.py
from django.db import models
from django.utils import timezone
# Create your models here.
class Comment(models.Model):
name=models.CharField(max_length=20)
comments=models.TextField()
date_added=models.DateTimeField(default=timezone.now)
def __str__(self):
return self.name
"""
{% for c in comment %}
{% endfor %}
"""
一个表单是通过一个按钮提交的,里面的类型是submit
<form>
<!-- button goes here and input fields also -->
</form>
改变这个
<input type="button" value="Submit">
到
<input type="submit" value="Submit">
然后在views.py
更改此 new_comment=Comment(name=request.POST['name'],comment=request.POST['comment'])
至
new_comment = Comment()
new_comment.name = request.POST.get("name")
new_comment.comments = request.POST.get("comment")
new_comment.save()
你的post方法应该是这样的:
def sign(request):
if request.method=='POST':
form = CommentForm(request.POST)
if form.is_valid():
new_comment=form.save()
return redirect('index')
else:
form = CommentForm()
context={'form' : form}
return render(request,'guestbook/sign.html',context)