【问题标题】:Django URL passing parameterDjango URL 传递参数
【发布时间】:2021-01-05 04:33:39
【问题描述】:

谁能给我解释一下如何在 Django URL 中传递参数

我在 view.py "def hours_ahead(request, offset)" 中创建了视图来计算提前时间。然后在 URL.py 我用 re_path(r'^time/plus/\d{1,2}/$', hours_ahead) 调用它。

但是当我输入 url http://127.0.0.1:8000/time/plus/2/ 时收到错误消息

/time/plus/2/ 处的类型错误 hours_ahead() 缺少 1 个必需的位置参数:'offset'

【问题讨论】:

  • 请提供有关您的实施的更多详细信息

标签: python django


【解决方案1】:

您在 URL 中配置了正则表达式,但没有指定将发送到您的视图函数的参数名称。

以下 URL 定义应该有效。请注意,?P 部分用于定义将捕获与正则表达式匹配的值的参数。

re_path(r'^time/plus/(?P<offset>\d{1,2})/$', hours_ahead)

注意 1: 如果您对可以添加的小时数不是很严格,您可以使用更简单的 URL 定义,只指定一个整数:

path('time/plus/<int:offset>/$', hours_ahead)

但这将允许 URL 的调用者添加大量小时,只要它适合整数。

注意 2: 不是您的问题,但如果您考虑正确的 API / 界面设计,这可能很重要:您所做的是一项行动,增加了时间。该操作现在由 HTTP GET 请求触发。操作应始终由其他 HTTP 方法触发,例如 POST、PATCH 等。

【讨论】:

    【解决方案2】:

    offset 应该是 URL 中的数据捕获(在 URL 模式中的括号内标识):

    (r'^time/plus/(\d{1,2})/$', hours_ahead)
    

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 2023-03-04
      • 2021-09-12
      • 2011-12-19
      • 2019-05-19
      • 2018-07-07
      • 2018-03-21
      • 2018-09-06
      相关资源
      最近更新 更多