Python 涉及?q=搜索查询不工作的URL的Django正则表达式模式
我有一个Django应用程序作为搜索工具。我面临的问题是无法通过Python 涉及?q=搜索查询不工作的URL的Django正则表达式模式,python,regex,django,model-view-controller,django-views,Python,Regex,Django,Model View Controller,Django Views,我有一个Django应用程序作为搜索工具。我面临的问题是无法通过url.py 视图.py def search(request): new_results = [] error = True if "q" in request.GET: query = request.GET["q"].strip() results = graph_search.main(query) for result in results:
url.py
视图.py
def search(request):
new_results = []
error = True
if "q" in request.GET:
query = request.GET["q"].strip()
results = graph_search.main(query)
for result in results:
result[3] = result[3].decode('unicode_escape').encode('ascii', 'ignore')
new_results.append(result)
new_results = list(reversed(sorted(new_results, key=itemgetter(4))))
return render(request, 'search.html',
{'results': new_results, 'query': query})
return render(request, 'search.html', {'error': error})
url.py
def search(request):
new_results = []
error = True
if "q" in request.GET:
query = request.GET["q"].strip()
results = graph_search.main(query)
for result in results:
result[3] = result[3].decode('unicode_escape').encode('ascii', 'ignore')
new_results.append(result)
new_results = list(reversed(sorted(new_results, key=itemgetter(4))))
return render(request, 'search.html',
{'results': new_results, 'query': query})
return render(request, 'search.html', {'error': error})
Rendering index.html-工作正常url(r'^$,'searchengine.views.index',name='home'),
Rendering search.html-工作正常url(r'^search',searchengine.views.search',name='search'),
呈现搜索结果-不起作用,而是呈现索引页
url(r'^/?q=$'、'searchengine.views.search',name='search'),
有人能帮我找到正确的正则表达式模式吗?我需要在Django中使用它来呈现像http://foo.com/?q=emily
在search.html
<p>You searched for: <strong>{{ query }}</strong></p>
{% if results %}
<div class="container">
<div class="row">
<div class="timeline-centered">
{% for result in results %}
<article class="timeline-entry">
<div class="timeline-entry-inner">
<div class="timeline-icon bg-info">
<i class="entypo-feather"></i>
</div>
<div class="timeline-label">
<strong>Statement: </strong>{{ result.3 }}<br>
<strong>Doc: </strong>{{ result.0 }} <br>
<strong>Context: </strong>{{ result.1 }} <br>
<strong>Related: </strong>{{ result.2 }} <br>
<strong>Confidence: </strong>{{ result.4}} % <br>
</div>
</div>
</article>
{% endfor %}
</div>
</div>
</div>
{% else %}
<p>No results matched your search criteria.</p>
您搜索的:{{{query}
{%if结果%}
{结果中的结果为%}
语句:{{result.3}}
Doc:{{result.0}}
上下文:{{result.1}}
相关:{{result.2}}
信心:{{result.4}}%
{%endfor%}
{%else%}
没有与您的搜索条件匹配的结果
我能让它工作的唯一方法就是改变
url(r'^$,'searchengine.views.index',name='home')
到
url(r'^$,'searchengine.views.search',name='search')
但这会使登录页呈现搜索页而不是主页,这是错误的。Django不会在URL模式中捕获查询字符串。关闭它并通过
请求访问它。在视图中获取['q']
。可能在捕获查询参数方面存在问题
url(r'^/?q=<query>$', 'searchengine.views.search', name='search'),
url(r'^/?q=$,'searchengine.views.search',name='search'),
?q=
可能是导致问题的原因
请尝试以下操作:
url(r'^\?q=(?P<query_search>\w+)$', 'searchengine.views.search', name='search'),
url(r'^\?q=(?P\w+)$,'searchengine.views.search',name='search'),
不要在^
之后使用/
和转义?
,因为它是正则表达式文本。还可以使用名称组(?P\w+
)将捕获的零件传递给具有给定参数名称的视图。您可以通过更改\w+
但另一方面,在URL中捕获
GET
参数不是正确的方法。查看@DanielRoseman在视图中的答案,了解如何在url.py中执行此操作是否应该是?q=
而不是?p=
?@RafaelCardoso是的!这是一个输入错误,我认为应该是一个反斜杠来避开正则表达式中的问号,^\?q=$
或者可能是^/\?q=$
。我对python不熟悉,所以可能是错的。@chris85我两个都试过了。它似乎不起作用。查看文档,可能是^\?q=(*?(?:&$)
。如果没有,我不确定我会把它留给有经验的人。你能详细说明一下吗。如何通过请求访问它。准确地获取['q']
。我不知道还能告诉你什么。在视图中使用该代码,它将为您提供q
参数的值。我已经在视图中这样做了。但它似乎不起作用。“似乎不起作用”不是很有用——到底发生了什么?您会遇到什么错误?它会重定向到索引页,而不是显示结果。在我的return语句returnrender(请求'search.html',{'results':new_results'q':q})
中,我传递的是q
。我获得显示结果的唯一方法是将url(r'^$,'searchengine.views.index',name='home')
更改为url(r'^$,'searchengine.views.search',name='search')
,这再次将主页更改为搜索页面,因为它是根url。