2017-03-20 6 views
0

djangoでドキュメント検索エンジンを実装しようとしています。メインページには、ユーザーがクエリを入力するテキストボックスがあります。クエリを入力すると、ユーザはクエリに関連するドキュメントのタイトルを含むページにリダイレクトされます。ただし、クエリの送信時に新しいページにリダイレクトできません。私のアプリはsearch名付け、これは開口部http://127.0.0.1:8000/search/にロードするページdjangoのフォーム提出時にページをリダイレクトできない

index.html

{% load static %} 

<html> 
<head> 
<link rel="stylesheet" type="text/css" href="{% static 'search/style.css' %}" /> 
<title>muGoogle</title> 
</head> 
<body> 
<div class = "container"> 
<h4 class = 'mugoogle'>muGoogle</h4> 
<form class="form-wrapper" method = "GET" action = "{% url 'doc_scorer'%}"> 
    <input type="text" name = 'query' class="textbox rounded" placeholder="Search docs related to..." required> 
    <input type="submit" class="button blue" value="Submit"> 
</form> 
</div> 
</body> 
</html> 

urls.pyファイルです:

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.index), 
    url(r'^search$', views.search), 
    url(r'^index$', views.index), 
    url(r'', views.doc_scorer, name="doc_scorer"), 
] 

私がしたいviews.pyファイル

from django.template import Context, loader 
from django.shortcuts import render, render_to_response 
from django.http import Http404, HttpResponse, HttpResponseRedirect 
import os 
from other_code import some_function 

def index(request): 
    template = loader.get_template("search/index.html") 
    return HttpResponse(template.render()) 

def search(request): 
    return HttpResponse("search is under construction") 

def doc_scorer(request): 
    query = request.GET.get('query') 
    context = {'query':some_function(query)} 
    return render_to_response('query_results.html', context) 

このページの結果をリダイレクトします。

query_results.html

{{ context['query'] }} 

私が間違っているつもり任意のアイデア?

+0

エラーが発生しますか? –

+0

@nik_mエラーはありません。リダイレクトはありません。投稿時にはURLだけが何も変わりません –

+0

'doc_scorer'は実際に呼び出されますか? 'query = request.GET .....'の下に 'print(query)'を置き、実際に印刷されているかどうか確認してください。 –

答えて

1

インデックスビューとdoc_scorerビューは同じURL(どちらの場合も '/')を持つようです。したがって、フォームがそのデータを '/'に送信すると、URLビューのリストに最初に表示されるインデックスビューによって処理されます。あなたのdoc_scorerビューのURL confのを変更する必要があります。

urlpatterns = [... 
    url('^doc_scorer/$', views.doc_scorer, name='doc_scorer'), 
] 
+0

それは意味があります。もう一つの簡単な質問。クエリの提出時に、リダイレクトされたURLの形式が 'http://127.0.0.1:8000/search /?query ='であることを望みます。どうすれば達成できるのですか? –

+1

あなたの書式 'action'は' {%url 'doc_scorer'%} 'を指しています。これが' localhost:8000/doc_scorer/'に解決されたとしましょう。フォームの 'method'が" GET "なので、ブラウザは自動的に送信されたデータをURLの一部として渡し、url' localhost:8000/doc_scorer /?query =​​'を呼び出します。あなたの目標を達成するために特別なことをする必要はないと思います...あなたのテンプレートのフォームは '/ search /'に提出していないことに注意してください。 –

1

おそらくurl (r '^ $', views.index)優先的に実行されます。 インデックスビューを変更してみてください。このような。

def index(request): 
    if not request.GET.get('query'): 
     return render_to_response('search/index.html', {}) 
    # search execution 
    query = request.GET.get('query') 
    context = {'query':some_function(query)} 
    return render_to_response('query_results.html', context) 
関連する問題