提交表单后,DJANGO中的POST方法返回“无”

时间:2019-12-13 20:44:17

标签: django python-3.x django-models

我已经构建了一个小型Web应用程序,该应用程序将从HTML表中获取数据并将其转储到sqlite数据库中。当我使用POST方法捕获特定的单元格值时,它不返回任何值。有人可以帮我如何从我在table.html下面创建的表中获取数据吗?最初,我只是尝试打印元素“名称”的值,之后我将其添加到数据库中。我希望输出为[“ name1”,“ name2”]

models.py

from django.db import models

class people(models.Model):
    Company = models.TextField()
    Contact = models.TextField()
    Country = models.TextField()

    def __str__(self):
        return self.Contact

urls.py

from django.contrib import admin
from django.urls import path, include
from . import views

urlpatterns = [
    path('', views.getvalue, name='myapp'),
]

views.py

from django.shortcuts import render

def home(request):
    return render(request, 'myapp/table.html')

def getvalue(request):

    if request.method == "POST":
        value = request.POST.get("cellvalue")
        print("The values is", value, request.method)
        return render(request, 'myapp/table.html')

table.html

<html>
<head>
</head>
<body>

<form role="form" action="getvalue", method="post">{% csrf_token %}
  <input type="submit" value="Update DB" />
  <table>
    <tr>
      <td name='cellvalue'>name1</td>
      <td name='cellvalue'>name2</td>
    </tr>
  </table>
</form>

</body>
</html>

2 个答案:

答案 0 :(得分:0)

好吧,我不是一个真正的django家伙,但是您确定您的模板发布了任何价值吗?

def getvalue(request):
    value = request.POST.get("R1")
    print("The R1 values is", value)
    return render(request, 'myapp/table.html')

在第一次调用时,根本不会有任何post变量,因此,如果您要处理此变量,最好使用FormView。

更新某些内容(由于我不是django专业人士,因此可能不是最好的方法)

所以我会选择一个FormView,它提供了一些开箱即用的功能。我只有一个AuthenticationForm的精品,但这可能会让您从这里开始

如此简单的视图可能看起来像这样

class UserLoginView(FormView):
    form_class = AuthenticationForm #UserLoginForm
    template_name = 'yourApp/registration/login.html'
    success_url = reverse_lazy('users_list') 

和表单模板可能是这样

<!-- templates/registration/login.html -->
{% load staticfiles %}

<link rel="stylesheet" type="text/css" href="{% static 'yourApp/css/style.css' %}">

<h2>Login</h2>
<form method="post" >
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit"/>
</form>

所以django在这里完成了魔术,因为我们只告诉模板用post发布东西,并且提供了magic表单,因为django知道我们使用了身份验证表单。因此,要做更多有用的事情,您可能需要阅读一些内容并相应地构建您的模板。也就是说,您需要告诉您的表单将帖子数据发送到哪里!!

这行是否真的将数据发布到您的getvalue方法中?

<form role="form" action="getvalue", method="post">

如果您不知道为什么不对您的方法进行一些打印调试呢?

def getvalue(request):
    print(dir(request))
    if request.method == "POST":
        value = request.POST.get("cellvalue")
        print("The values is", value, request.method)
        return render(request, 'myapp/table.html')

您现在应该在控制台中看到很多东西,并弄清楚您真正想知道哪些细粒度的东西。

更新您的代码

采用这种形式

<form role="form" action="getvalue", method="post">{% csrf_token %}

  <table class = "table1">
    <input type="submit" value="Update DB"/>
    <tr>
      <td><input class = splinput type="label" name = "cellvalue" value=""/></td>
      <td><input class = splinput type="label" name = "cellvalue" value=""/></td>
      <td><input class = splinput type="label" name = "cellvalue" value=""/></td>
    </tr>

</form>

您需要明确说明后端与what.so有关,所以您的代码行               

变成类似

      <td><input class = splinput type="text" name = "give_me_some_unique_name" value="and_pass_a_value"/></td>

找出您可能要输入的输入类型

https://www.w3schools.com/html/html_form_input_types.asp

并阅读

在那之后您的视图应该得到可以处理request.POST对象的东西。在这里,您的输入名称应该是课程值的键和值。

答案 1 :(得分:0)

我稍微修改了HTML文件,并得到了预期的结果。看来我需要在每个“ td元素”中插入一个输入,然后查询其值。请在下面找到代码:

<html>
<body>

<style>
.splinput {
  border: none;
  background: transparent;
  height: 100%;
  width: 100%;
}

table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 30%;
  table-layout:fixed;
}

td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 0px;
  height: 30
}

</style>

<form role="form" action="getvalue", method="post">{% csrf_token %}

  <table class = "table1">
    <input type="submit" value="Update DB"/>
    <tr>
      <td><input class = splinput type="text" name = "cellvalue" value=""/></td>
      <td><input class = splinput type="text" name = "cellvalue" value=""/></td>
      <td><input class = splinput type="text" name = "cellvalue" value=""/></td>
    </tr>

</form>

</body>
</html>