错误可以在这里看到:http://djaffry.selfip.com:8080/
我希望索引页接受参数,无论是
mysite.com/search/param_here
或
mysite.com/?search=param_here
我的 URL 模式中有这个,但我无法让它工作。有什么建议吗?
urlpatterns = patterns('',
(r'^$/(?P<tag>\w+)', 'twingle.search.views.index'),
)
最佳答案
首先,您的 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')
在这种情况下,您可以像这样访问 View 中的查询
字符串:
request.GET.get('query', '')
没有查询字符串
mysite.com/search/param_here
将匹配:
(r'^search/(?P<query>\w+)$', 'twingle.search.views.index'),
与 \w
匹配的所有内容(您应该更改它以满足您的需求)都将作为名为 query
的参数与索引 View 函数的请求一起传递。
两者
您可以使用两种 url 模式,如下所示:
urlpatterns = patterns('twingle.search.views',
url(r'^$', 'index'),
url(r'^search/(?P<query>\w+)$', 'index'),
)
在此示例中, View 将如下所示:
def index(request, query=None)
if not query:
query = request.GET.get('query', '')
# do stuff with `query` string
关于Django 接受 GET 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2891441/