如何匹配Django URL中的问号字符?

时间:2011-03-31 13:16:48

标签: django url

在我的Django应用程序中,我有一个我想要匹配的URL,看起来有点像这样:

/mydjangoapp/?parameter1=hello&parameter2=world

这里的问题是'?'字符是保留的正则表达式字符。

我尝试了很多方法来匹配这个...这是我的第一次尝试:

(r'^pbanalytics/log/\?parameter1=(?P<parameter1>[\w0-9-]+)&parameter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction')

这是我的第二次尝试:

(r'^pbanalytics/log/\\?parameter1=(?P<parameter1>[\w0-9-]+)&parameter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction')

但仍然没有运气!

有谁知道我怎么能匹配'?'完全在Django URL中?

4 个答案:

答案 0 :(得分:33)

别。您不应将查询字符串与URL Dispatcher匹配。 您可以使用request.GET字典访问所有值。

网址

(r'^pbanalytics/log/$', 'mydjangoapp.myFunction')

功能

def myFunction(request) 
  param1 = request.GET.get('param1')

答案 1 :(得分:2)

Django的URL模式只匹配URL的路径组件。你也试图匹配查询字符串,这就是你遇到麻烦的原因。你的第一个正则表达式做你想要的,除了你应该只匹配路径组件。

在您的视图中,您可以通过request.GET

访问查询字符串

答案 2 :(得分:1)

?字符是正则表达式中的保留符号,是的。你的第一次尝试看起来像正确逃脱它。

但是,? in a URL也是路径的结尾和查询部分的开头(如下所示:protocol://host/path/?query#hashDjango's URL dispatcher不允许您根据查询部分AFAIK发送网址。

我的建议是编写一个django视图,根据视图函数的request.GET参数进行调度。

答案 3 :(得分:1)

执行原始问题的方法,即URL dispatch var中的全部内容......

url(r'^mens/(?P<pl_slug>.+)/$', 'main.views.mens',),

url(r'^mens/(?P<pl_slug>\?+)/$', 'main.views.mens',),

为何需要而言,GET URL并不能为客户和客户提供良好的“永久链接”或良好的演示文稿。

客户经常要求对网址进行格式化,即

www.example-clothing-site.com/mens/tops/shirts/t-shirts/Big_Brown_Shirt3XL

这是最终用户更易读的界面,为客户提供更好的整体演示。