使用Django中的查询参数路由请求,而不使用反斜杠

时间:2018-01-20 01:28:53

标签: regex django django-rest-framework

我正在尝试处理查询参数类似于以下网址的请求:http://127.0.0.1:8080/foo?bar=-capacity。我已经对Django的url模式和正则表达式进行了相当多的尝试和错误,但到目前为止还没有成功。我的正则表达式知识无疑是精简的。

此模式 url(r'^ foo(。*)$',views.QueryFoo.as_view()),将处理上述请求,但问题是它会抓取常规获取请求,例如以下: http://127.0.0.1:8080/foo 。我可以在url模式中添加一个反斜杠,如 url(r'^ foo /(.*)$',views.QueryFoo.as_view()),这似乎是Django规范,但随后我必须处理来自两个单独网址的请求。

编辑: 另一个想法是将所有请求路由到/ foo到同一个视图,然后在url中检查查询参数。如果存在进程,则执行正常的请求处理。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

据我所知,Django URL /视图匹配仅适用于URL的路径部分,始终排除查询字符串参数。因此,根据定义,无法使其匹配两个不同的视图,具体取决于某些查询字符串参数的存在(或不存在)。

如果您想根据参数是否在查询字符串上传递而执行其他操作,请执行以下操作:

const greetings = {
  hello: [{
    english: 'hi',
    french: 'bonjour',
    portuguese: 'oi'
  }],
  goodbye: [{
    english: 'bye',
    french: 'au revoir',
    portuguese: 'tchau'
  }]
};

greetings.hello.portuguese;

greetings['hello']['portuguese'];

greetings['hello'][2];