Django域+regex参数在生产机器上不起作用

2024-04-25 17:53:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在有一个django视图,它有一个相当简单的搜索函数(接受用户输入,返回对象列表)。对于可用性,我希望通过url传递搜索参数的选项如下:

你知道吗www.example.com/search/mysearchstring你知道吗

其中mysearchstring是搜索函数的输入。我使用regex来验证任何字母数字或下划线字符。你知道吗

我遇到的问题是,虽然这在我的开发环境中工作得很好,但它在实时机器上会中断。

目前,我在其他django视图中使用完全相同的方法(使用不同的regex模式),没有任何问题。这也让我相信。你知道吗

1)我的正则表达式非常糟糕(更有可能)

2)不同环境的regex验证器存在差异(可能性较小)

运行这个程序的机器使用的是django1.6和python2.7,它们稍微落后于我的开发机器,但并不显著。你知道吗

你知道吗网址.py你知道吗

SEARCH_REGEX = '(?P<pdom>\w*)?' 
urlpatterns = patterns('',
....
url(r'^polls/search/' + SEARCH_REGEX,  'polls.views.search'),
...)

像这样传递到视图中 意见。py公司

def search(request, pdom):
...

加载页面时,出现以下错误:

ImproperlyConfigured: "^polls/search/(?P<pdom>\w*)?" is not a valid regular expression: nothing to repeat

我已经为这个挠头好一阵子了。我试着在结果没有变化的情况下使用一些不同的方法来封装表达式。如果您有任何见解,我将不胜感激!你知道吗


Tags: django方法函数用户py机器视图url
1条回答
网友
1楼 · 发布于 2024-04-25 17:53:40

我会改成这样:

SEARCH_REGEX = r'(?P<pdom>.+)$' 

在python中,对正则表达式使用原始字符串r''通常是个好主意。你知道吗

该组将匹配url搜索部分的全部内容。我将在视图中处理查询字符串验证,而不是在url regex中。如果有人试图搜索polls/search/two+words,则不应返回404,而是返回400状态和错误消息,说明搜索字符串的格式不正确。你知道吗

最后,您可能希望遵循搜索url的通用约定。它使用一个名为q的查询参数。因此,您的url模式将是^polls/search/$,然后您只需使用如下方式处理视图中的q

def search_page_view(request):

    query_string = request.GET.get('q', '')

相关问题 更多 >