Django:从 html for 循环获取价值 views.py
Django: Get value from html for-loop for views.py
我无法从 html 页面的 for 循环中获取值。
这是我的设置:用户有一个使用自动完成功能的输入字段。这个函数使用了 Django 中的 shop-Model。提交后,产品将被添加到 Django 中的 Shopping_List-Model 中。它将显示在页面的另一个 div 中。这目前没有问题。
每个产品都在 table 的一行中,包括一个用于从购物清单中删除该产品的按钮。这样的按钮正在工作。单击按钮时,我试图打印出一些东西。但是我无法从 table 行中获取值,即产品名称。它总是 returns none。使用该值我想从购物清单中删除该产品。
非常感谢任何建议!
这是我的代码:
HTML
<div>
<!--Input field and autocomplete-->
<form id="product_add" action="{% url 'shop' %}" method="post">
{% csrf_token %}
<input type="text" name="shop_product" id="shop_product">
<!--Code for autocomplete-->
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$(function () {
$("#shop_product").autocomplete({
source: "{% url 'shop' %}",
minLength: 2
});
});
</script>
<input type="submit" name="button_add" value="Add">
</form>
</div>
<div>
<table>
{% for item in items %}
<tr>
<form id="shop_delete" action="{% url 'shop_delete' %}" method="post">
<td name="product" id="product">{{ item.product }}</td>
<td><button type="submit" name="delete">X</button></td>
</form>
</tr>
{% endfor %}
</table>
</div>
views.py
def shop(request):
if request.method == "POST":
if request.POST["button_add"] == "Add":
user = request.user
product = request.POST["shop_product"]
date=datetime.date.today()
if product != "": Shopping_List.objects.create(user=user, date=date, product=product)
else:
print("delete")
if 'term' in request.GET:
qs = Shop.objects.filter(product__icontains=request.GET.get('term'))
items = list()
for product in qs:
items.append(product.product)
# titles = [product.title for product in qs]
return JsonResponse(items, safe=False)
items = Shopping_List.objects.all().filter(user=request.user, date=datetime.date.today())
return render(request, "shop.html", {
"items": items
})
def shop_delete(request):
if request.method == "POST":
product = request.POST.get("product")
print(product)
return redirect('shop')
您的表单不包含任何输入,因此没有随 POST 请求提交输入数据。
#This is not an input
<td name="product" id="product">{{ item.product }}</td>
当您使用有效的表单 input 时,您将能够在您的视图中检索产品名称。
例如,您可以添加一个包含产品名称的隐藏字段。那么您就不需要重新设计 table 元素。
<form id="shop_delete" action="{% url 'shop_delete' %}" method="post">
<td id="product">{{ item.product }}</td>
<input type="hidden" value="{{item.product}}" name="product">
<td><button type="submit" name="delete">X</button></td>
</form>
我无法从 html 页面的 for 循环中获取值。
这是我的设置:用户有一个使用自动完成功能的输入字段。这个函数使用了 Django 中的 shop-Model。提交后,产品将被添加到 Django 中的 Shopping_List-Model 中。它将显示在页面的另一个 div 中。这目前没有问题。
每个产品都在 table 的一行中,包括一个用于从购物清单中删除该产品的按钮。这样的按钮正在工作。单击按钮时,我试图打印出一些东西。但是我无法从 table 行中获取值,即产品名称。它总是 returns none。使用该值我想从购物清单中删除该产品。
非常感谢任何建议!
这是我的代码:
HTML
<div>
<!--Input field and autocomplete-->
<form id="product_add" action="{% url 'shop' %}" method="post">
{% csrf_token %}
<input type="text" name="shop_product" id="shop_product">
<!--Code for autocomplete-->
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$(function () {
$("#shop_product").autocomplete({
source: "{% url 'shop' %}",
minLength: 2
});
});
</script>
<input type="submit" name="button_add" value="Add">
</form>
</div>
<div>
<table>
{% for item in items %}
<tr>
<form id="shop_delete" action="{% url 'shop_delete' %}" method="post">
<td name="product" id="product">{{ item.product }}</td>
<td><button type="submit" name="delete">X</button></td>
</form>
</tr>
{% endfor %}
</table>
</div>
views.py
def shop(request):
if request.method == "POST":
if request.POST["button_add"] == "Add":
user = request.user
product = request.POST["shop_product"]
date=datetime.date.today()
if product != "": Shopping_List.objects.create(user=user, date=date, product=product)
else:
print("delete")
if 'term' in request.GET:
qs = Shop.objects.filter(product__icontains=request.GET.get('term'))
items = list()
for product in qs:
items.append(product.product)
# titles = [product.title for product in qs]
return JsonResponse(items, safe=False)
items = Shopping_List.objects.all().filter(user=request.user, date=datetime.date.today())
return render(request, "shop.html", {
"items": items
})
def shop_delete(request):
if request.method == "POST":
product = request.POST.get("product")
print(product)
return redirect('shop')
您的表单不包含任何输入,因此没有随 POST 请求提交输入数据。
#This is not an input
<td name="product" id="product">{{ item.product }}</td>
当您使用有效的表单 input 时,您将能够在您的视图中检索产品名称。
例如,您可以添加一个包含产品名称的隐藏字段。那么您就不需要重新设计 table 元素。
<form id="shop_delete" action="{% url 'shop_delete' %}" method="post">
<td id="product">{{ item.product }}</td>
<input type="hidden" value="{{item.product}}" name="product">
<td><button type="submit" name="delete">X</button></td>
</form>