在我的Django应用程序中,我有一个我想要匹配的URL,看起来有点像这样:
/mydjangoapp/?parameter1=hello¶meter2=world
这里的问题是'?'字符是保留的正则表达式字符。
我尝试了很多方法来匹配这个...这是我的第一次尝试:
(r'^pbanalytics/log/\?parameter1=(?P<parameter1>[\w0-9-]+)¶meter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction')
这是我的第二次尝试:
(r'^pbanalytics/log/\\?parameter1=(?P<parameter1>[\w0-9-]+)¶meter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction')
但仍然没有运气!
有谁知道我怎么能匹配'?'完全在Django URL中?
答案 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#hash
。
Django'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
这是最终用户更易读的界面,为客户提供更好的整体演示。