2010-05-23 88 views
2

错误可以在这里看到:http://djaffry.selfip.com:8080/Django的接受GET参数

我想索引页接受参数,无论是

mysite.com/search/param_here 

mysite.com/?search=param_here 

我有这样的我URL模式,但我无法让它工作。有什么建议么?

urlpatterns = patterns('', 
     (r'^$/(?P<tag>\w+)', 'twingle.search.views.index'), 
    ) 

回答

21

首先,你在url模式中的正则表达式是错误的。

r'^$/(?P<tag>\w+)' 

它说,以匹配一切从

  • ^线
  • $到行
  • 具有被后由文字和数字的命名标签模式的结束的开始行结束

通常在一行结束后来另一行或EOF不满足(除非你使用多行正则表达式,你不需要这些)。

线到底应该在标签后:

r'^/(?P<tag>\w+)$' 

使用查询字符串

Query strings are not parsed by url reslover.

因此,如果你在格式有网址:

http://mysite.com/?query=param_here 

将匹配:

(r'^$', 'twingle.search.views.index') 

在这种情况下,您可以访问query字符串中的观点,像这样:

request.GET.get('query', '') 

没有查询字符串

mysite.com/search/param_here 

将匹配:

(r'^search/(?P<query>\w+)$', 'twingle.search.views.index'), 

凡匹配\w(您应该更改此套件以满足您的需求)的所有内容都将与请求索引视图函数一起传递,作为名为query的参数。

两个

:您可以使用URL模式,像这样:

urlpatterns = patterns('twingle.search.views', 
    url(r'^$', 'index'), 
    url(r'^search/(?P<query>\w+)$', 'index'), 
) 

在这个例子中的观点会是这个样子:

def index(request, query=None) 
    if not query: 
     query = request.GET.get('query', '') 
    # do stuff with `query` string 
+0

我正在使用错误'url(r'^ search /(?P \ w +)$','index')',语法无效(urls.py,第9行) 有什么想法为什么? – tipu 2010-05-23 11:50:43

+0

如果你复制/粘贴了两个模式的最后一个urlpatterns示例代码,似乎我在第一个url模式后忘记了一个逗号。我现在已经修好了。 – 2010-05-23 12:02:38

+0

我还编辑了urlpatterns(更名为''到''),以便更容易在视图中使用并添加了一个视图示例。 – 2010-05-23 12:29:53