【问题标题】:How to pass a parameter date to url dispatcher but as named parameter如何将参数日期传递给 url 调度程序但作为命名参数
【发布时间】:2021-05-13 17:06:58
【问题描述】:

我已经阅读了很多教程和 stackoverflow 问题,但我还没有找到如何做到这一点。我需要在对 URL 的 GET 调用中传递 Date 类型的参数。 我知道这听起来很简单,但我是 Django 新手,我发现的内容大多是这样的:

Django url that captures yyyy-mm-dd date

如果我想要一个类似的 URL,所有这些答案都可以解决问题

http:www.myweb.com/2021/09/02

如果我想为博客或网站编写 url,那就太好了,但我是为端点做的,就我而言,我需要这样的东西

/some-action-endpoint/?created_at_gte=2020-01-01

所以,我需要捕获一个值为 2020-02-01 的参数(希望命名为 created_at_gte)(如果我可以立即将其捕获为 Date 对象,那就太棒了,但我可以使用字符串)

所以,我的问题是: 1.- 创建一个这样的组就足够了

url(r'^my-endpoint/(?P<created_at_gte>[(\d{2})[/.-](\d{2})[/.-](\d{4})]{4})/$', views.my_view),

注意_:顺便说一下,上一个不起作用,如果有人知道为什么会非常感谢它。

2.-端点需要两个参数:created_at_gte和created_at_lte。我该如何处理?我需要在 url 模式中添加两个 url 吗?

我正在使用 Django 1.11 和 Python 2.7。无法使用其他版本。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    查询参数不是 URL 匹配行为的一部分,因此不幸的是,您需要将它们作为查询参数而不是 URL 路径元素来处理,这意味着您必须自己做更多的事情,而不是依靠模式匹配来拒绝错误的请求。

    只要您的基本 URL 模式(在您的示例中为 ^my-endpoint/)是明确的,并且您愿意处理参数可能未设置或可能设置为不' 不会在您的视图中解析为日期,但您不会获得正则表达式派生的保证或将它们绑定到视图函数参数的能力。

    相反,您必须从 request.GET QueryDict 对象中提取它们。看起来像这样:

    在您的网址格式中:

    url(r'^my-endpoint/$', views.my_view),
    

    然后在你看来:

    def my_view(request):
        created_at_start = request.GET.get("created_at_gte")
        created_at_end = request.GET.get("created_at_lte")
        # you now have no guarantees about these values except that if not None they'll be strings
        # remember to do something appropriate for None, empty strings, strings that aren't dates, strings where end is before the start, etc
    

    【讨论】:

    猜你喜欢
    • 2015-04-04
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多