我已经构建了一个小型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>
答案 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>