Django, HTML-шаблон, форма отправки POST не работает - PullRequest
0 голосов
/ 09 апреля 2019

Кнопка «Отправить» в этой форме, в этом проекте 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 %}
"""

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Форма отправляется кнопкой, тип которой отправляется внутри

<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()
1 голос
/ 09 апреля 2019

Ваш метод публикации должен быть таким:

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)
...