我目前有一个带有相当简单的搜索功能的django视图(接受用户输入,返回一个对象列表)。为了实用性,我想选择通过url传递搜索参数:
www.example.com/search/mysearchstring
mysearchstring是搜索功能的输入。我正在使用正则表达式来验证任何字母数字或下划线字符。
我遇到的问题是,虽然这在我的开发环境中运行良好,但它会在现场机器上中断。
目前,我在其他django视图中使用这种完全相同的方法(具有不同的正则表达式模式),没有任何问题。这让我相信。
1)我的正则表达式真的很糟糕(更有可能)
2)环境之间的正则表达式验证器存在差异(不太可能)
运行它的机器使用的是django 1.6和python 2.7,它们稍微落后于我的开发机器,但并不显着。
urls.py
SEARCH_REGEX = '(?P<pdom>\w*)?'
urlpatterns = patterns('',
....
url(r'^polls/search/' + SEARCH_REGEX, 'polls.views.search'),
...)
将这些传递给视图 观点。吡啶
def search(request, pdom):
...
加载页面时,出现以下错误:
ImproperlyConfigured: "^polls/search/(?P<pdom>\w*)?" is not a valid regular expression: nothing to repeat
我一直在摸着这个。我试图在表达式周围使用几种不同的封装方法,而不会改变结果。非常感谢任何见解!
答案 0 :(得分:0)
我会改为:
SEARCH_REGEX = r'(?P<pdom>.+)$'
在python中使用原始字符串r''
作为正则表达式通常是个好主意。
该论坛将匹配您网址的搜索部分的全部内容。我会在视图中处理查询字符串验证,而不是在url正则表达式中。如果有人试图搜索polls/search/two+words
,则不应返回404,而应返回400状态和错误消息,说明搜索字符串格式错误。
最后,您可能希望遵循搜索网址的通用约定。哪个是使用名为q
的查询参数。因此,您的网址格式为^polls/search/$
,然后您只需使用以下内容处理视图中的q
:
def search_page_view(request):
query_string = request.GET.get('q', '')