django - Django中一个表单的两个提交按钮以使用视图中的两个不同功能
问题描述
我是 Django 的新手,现在我正在做我的第一个项目。
我的 home.html 文件包含表单(引导类),其中包含用于填充数据的条目。这些数据是整数类型。方法='获取
在表单的底部,我有两个提交按钮。我的意图是他们首先要从条目中获取数据,计算它们并使用视图中的主页功能在浏览器站点上显示结果。第二个按钮将获取相同的数据,计算它们并使用它们由 ReportLab 通过视图中的 some_view 函数转换为 pdf。我的问题是。
- 如何在条目中保留估算值(现在这些字段在单击提交按钮后被清除)
- 如上所述,如何分别使用这两个按钮。现在我只能激活一个按钮,我必须选择是否要使用一个功能或另一个。
视图.py
import reportlab
import io
from django.http import FileResponse
from reportlab.pdfgen import canvas
#==================================
from django.shortcuts import render
from . import slownie
def home (request):
ls=''
ls1=''
ls3=''
liczba= request.GET.get("li200")
liczba1=request.GET.get("li100")
liczba3=request.GET.get("li50")
if liczba and liczba.isdigit():
liczba=int(liczba)*200
ls=slownie.slownie(int(liczba))
if liczba1 and liczba1.isdigit():
liczba1=int(liczba1)*100
ls1=slownie.slownie(int(liczba1))
if liczba3 and liczba3.isdigit():
liczba3=int(liczba3)*50
ls3=slownie.slownie(int(liczba3))
suma=0
if liczba1 and liczba and liczba3:
suma=int(liczba)+int(liczba1)+int(liczba3)
return render(request, 'home.html',{'liczba':liczba,'liczba1':liczba1,'liczba3':liczba3,
'suma':suma,
'ls':ls,
'ls1':ls1,
'ls3':ls3})
def some_view(request):
ls = ''
ls1 = ''
ls3 = ''
liczba = request.GET.get("li200")
liczba1 = request.GET.get("li100")
liczba3 = request.GET.get("li50")
if liczba and liczba.isdigit():
liczba = int(liczba) * 200
ls = slownie.slownie(int(liczba))
if liczba1 and liczba1.isdigit():
liczba1 = int(liczba1) * 100
ls1 = slownie.slownie(int(liczba1))
if liczba3 and liczba3.isdigit():
liczba3 = int(liczba3) * 50
ls3 = slownie.slownie(int(liczba3))
suma = 0
# Create a file-like buffer to receive PDF data.
buffer = io.BytesIO()
# Create the PDF object, using the buffer as its "file."
p = canvas.Canvas(buffer)
# Draw things on the PDF. Here's where the PDF generation happens.
# See the ReportLab documentation for the full list of functionality.
p.drawString(100, 100, ls3)
# Close the PDF object cleanly, and we're done.
p.showPage()
p.save()
# FileResponse sets the Content-Disposition header so that browsers
# present the option to save the file.
buffer.seek(0)
return FileResponse(buffer , as_attachment=True, filename='hello.pdf')
主页.html
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<title>Title</title>
<style>
body { margin: 40px }
.my-container {
border: 1px solid green}
.my-row {
border: 2px solid blue}
.my-col {
border: 2px solid red}
btn-primary { margin-left: 50px}
.align-right {
text-align: center;
border: 0;
}
</style>
</head>
<body>
<div class="container my-container">
<form action="{% url 'home' %}" method="get">
<div class= "row my-row">
<div class="col-3 my-col">
<input type="text" placeholder="0" name="li200" size="1" />
</div>
<div class="col my-col">
<h3><span class="badge badge-secondary"> {% if liczba %}
{{ liczba }}
{% endif %}
</span></h3>
</div>
<div class="col my-col">
<h3><span class="badge badge-secondary"> {% if ls %}
{{ ls }}
{% endif %}
</span></h3>
</div>
</div>
<div class= "row my-row">
<div class="col-3 my-col">
<input type="text" placeholder="0" name="li100" size="1" />
</div>
<div class="col my-col">
<h3><span class="badge badge-secondary"> {% if liczba1 %}
{{ liczba1 }}
{% endif %}
</span></h3>
</div>
<div class="col my-col">
<h3><span class="badge badge-secondary"> {% if ls1 %}
{{ ls1 }}
{% endif %}
</span></h3>
</div>
</div>
<div class= "row my-row">
<div class="col-3 my-col">
<input type="text" placeholder="0" name="li50" size="1" />
</div>
<div class="col my-col">
<h3><span class="badge badge-secondary"> {% if liczba3 %}
{{ liczba3 }}
{% endif %}
</span></h3>
</div>
<div class="col my-col">
<h3><span class="badge badge-secondary" name="superowo"> {% if ls3 %}
{{ ls3 }}
{% endif %}
</span></h3>
</div>
</div>
<div class= "row my-row">
<div class="col-3 my-col">
</div>
<div class="col my-col">
<h3><span class="badge badge-secondary"> {% if suma %}
{{ suma }}
{% endif %}
</span></h3>
</div>
</div>
<input type="submit" class="btn" value="Click" href="{% url 'home'%}" name="print_btn">
<a class="btn btn-primary" type="submit" href="{% url 'some_view'%}" >Do PDF</a>
<div class="align-right">
</div>
</form>
</div>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
</body>
解决方案
推荐阅读
- mysql - Aurora rds -> MySQL rds 跨区域复制
- ansible - 如何在构建期间通过ansible访问打包机(IP /主机)
- r - 带有 R 包 Repmis 的重音字母
- laravel - Laravel - 查找名称并显示
- elasticsearch - 具有不同标记位置/偏移的模式捕获
- sql - Laravel:具有不同用户表名的不同列名
- ios - CALayer在不同的屏幕尺寸下绘制不同
- c++ - 如何正确结束 pthread?
- java - 用于 Google Action 的 Java Servlet 不工作,日志给出明显错误
- php - 使用 PHP-DI 注入模拟对象以使用 PHPUnit 测试控制器