【发布时间】:2015-05-25 01:04:58
【问题描述】:
我有一个用作搜索工具的 Django 应用程序。我面临的问题是我无法通过urls.py 获得搜索结果页面
views.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})
urls.py
渲染 index.html - 工作正常url(r'^$', 'searchengine.views.index', name='home'),
渲染 search.html - 工作正常url(r'^search', 'searchengine.views.search', name='search'),
呈现搜索结果 - 不起作用,而是呈现索引页面
url(r'^/?q=<query>$', 'searchengine.views.search', name='search'),
谁能帮我找到正确的正则表达式模式,我需要在 Django 中使用它来呈现像 http://foo.com/?q=emily 这样的 URL
在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>
我可以让它工作的唯一方法是改变
url(r'^$', 'searchengine.views.index', name='home')
到
url(r'^$', 'searchengine.views.search', name='search')
但是这会让登陆页面呈现搜索页面而不是主页,这是错误的。
【问题讨论】:
-
应该是
?q=而不是urls.py中的?p=? -
@RafaelCardoso 是的!那是一个错字
-
我认为它应该是一个反斜杠来逃避正则表达式中的问号,
^\?q=<query>$或者可能是^/\?q=<query>$。我不熟悉python,但可能是错的。 -
@chris85 我都试过了。它似乎不起作用。
-
查看了文档,docs.djangoproject.com/en/1.8/topics/http/urls,所以可能是
^\?q=(.*?(?:&|$))。如果没有,我不确定我是否会将其留给有经验的人。
标签: python regex django model-view-controller django-views