Skip to main content
 首页 » 编程设计

python之涉及 q= 搜索查询的 URL 的 Django 正则表达式模式不起作用

2024年10月25日31sxdcgaq8080

我有一个用作搜索工具的 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}} &#37 <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')

但这会使着陆页呈现搜索页而不是主页,这是错误的。

请您参考如下方法:

Django 不捕获 URL 模式中的查询字符串。将其关闭并通过 View 中的 request.GET['q'] 访问它。