我有一个包含所有应用程序URL文件的基本URL文件,我想做的是单击Generate PDF Button
,我想点击一个APIView / view-function
并通过传递变量作为参数get
方法,不进行编码。
HTML:
<form onsubmit="{% url 'api-product:invoice-pdf-get' %}?R={{ variable }}">
<input type="submit" value="Generate PDF">
</form>
基本URL
path('api/product/', include(('store.urls', 'store'), namespace='api-product')),
path('invoice/', InvoiceUrl.as_view(), name='print-invoice'),
应用程序网址:
path('invoice-pdf-get/', invoice.InvoiceToPdf.as_view(), name='invoice-pdf-get'),
在生成的点击URL上 :(除参数外,为最新)
http://localhost:8000/invoice/?
我无法理解为什么我得到相同的URL,但是当我检查HTML时却看到其中包含URL,但是没有 localhost:8000
。
StackOverflow
上有几个与反向URL相关的答案,没有帮助。
我也没有包含任何Java脚本等,只有引导程序和简单的自定义CSS。只是一张普通桌子。
如果我只是从Windows中打开HTML 文件目录,请并单击按钮,我将得到:
http://localhost:63342/pos2all/templates/pogo-invoice.html?
更新:
现在,参数仍未传递,尽管在HTML检查中仍然可见,与上图相同。
API外观如下:
class InvoiceToPdf(APIView):
"""
This API is used to get the Invoice and return pdf of invoice
using rest_framework Response and premission_classes
"""
permission_classes = (AllowAny,)
def get(self, request):
return Response("hi")
答案 0 :(得分:4)
使用表单action
属性而不是onsubmit
。
<form action="{% url 'api-product:invoice-pdf-get' %}">
action
属性是您要表单提交到的URL。但是,当您使用GET方法提交表单时,该表单会将来自输入的数据添加为查询参数,因此操作url中将没有查询字符串。
要通过表单提交传递查询参数,请使用表单输入。您可以将hidden
字段用于不应编辑的数据。
<form action="{% url 'api-product:invoice-pdf-get' %}" >
<input type="hidden" name="R" value="{{ variable }}" />
<input type="submit" value="Generate PDF" />
</form>
表单提交的默认方法是GET
,但是您可以显式添加该方法以使其更加清晰。
<form method="get" action="{% url 'api-product:invoice-pdf-get' %}">