【问题标题】:django reverse url hitting same urldjango 反向 url 命中相同的 url
【发布时间】:2019-01-12 07:07:29
【问题描述】:

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

基本网址

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 时得到相同的 URL,但我看到 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")

【问题讨论】:

  • 您希望传递什么值?您的表单中没有任何字段,没有要传递的值
  • 在 url 模式中它显示 /?R= 我希望将它作为 request.GET.get['R'] 得到它,因为我正在查看 stackoverflow 以了解如何通过 get 传递参数,所以它不会被传递,他们建议这样做@丹尼尔罗斯曼
  • 基本上我想通过get方法将参数传递给api,
  • invoice-pdf-get的模式可能有问题
  • 如果我将模式更改为invoice-pdf-get/?R=,它会说找不到页面,

标签: html django django-views django-urls


【解决方案1】:

使用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' %}">

【讨论】:

  • 这是我得到的不带参数的url,参数只是一个invoice_id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 2018-05-19
  • 1970-01-01
  • 2012-12-05
  • 2010-11-16
  • 2023-03-25
  • 2019-11-04
相关资源
最近更新 更多