首页 > 解决方案 > django 参数通过获取在形成直接 url 时不起作用

问题描述

基本网址:

path('api/product/',
include(('store.urls', 'store'),
namespace='api-product')),

店铺网址:

path('invoice-pdf-get/',
invoice.InvoiceToPdf.as_view(),
name='invoice-pdf-get'),

HTML:

<html>
<body>
<form method="get" action="{% url 'api-product:invoice-pdf-get' %}?R={{ invoice.invoice_unique_number }}">
<input type="submit" value="Generate PDF">
</form>
</body>
</html>

当我点击按钮时,我在浏览器中得到的 url 为:

http://localhost:8000/api/product/invoice-pdf-get/?

正如预期的那样:

http://localhost:8000/api/product/invoice-pdf-get/?invoice_number=SOMEKEY

虽然如果我通过表单提交隐藏类型输入,我会得到预期的结果
,但我正在阅读:Daniel Roseman SO answer。通过 传递参数GET
尽管检查显示了 URL(见图),但为什么我没有得到预期的结果?

表单网址

标签: djangodjango-urls

解决方案


当通过 GET 提交表单时,表单中的值将作为查询字符串发送。这会覆盖URL中的任何查询字符串action。例如,请参阅此 SO 答案

您应该将您的值作为表单本身的隐藏输入。

<form method="get" action="{% url 'api-product:invoice-pdf-get' %}">
  <input type="hidden" name="R" value="{{ invoice.invoice_unique_number }}">
  <input type="submit" value="Generate PDF">
</form>

推荐阅读