django反向URL打相同的URL

时间:2018-08-04 19:02:08

标签: html django django-views django-urls

我有一个包含所有应用程序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/?

HTML INSPECT

我无法理解为什么我得到相同的URL,但是当我检查HTML时却看到其中包含URL,但是没有 localhost:8000StackOverflow上有几个与反向URL相关的答案,没有帮助。
我也没有包含任何Java脚本等,只有引导程序和简单的自定义CSS。只是一张普通桌子。

如果我只是从Windows中打开HTML 文件目录,请并单击按钮,我将得到:

http://localhost:63342/pos2all/templates/pogo-invoice.html?


更新

现在,参数仍未传递,尽管在HTML检查中仍然可见,与上图相同。
enter image description here

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")

1 个答案:

答案 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' %}">