2016-11-16 11 views
0

私はおそらく非常に基本的な質問があります。私はDjango forms docsを読んだが、まだここに何か不足している。あるテンプレート(search.html)に検索バーを置き、別のテンプレート(results.html)で検索クエリを返したいとします。私は次のエラーを返すthis SO answer as a guideを使用して、これまでのところ次のようなことがあります。助けてくれてありがとう。Django - 検索ビューの検索クエリに基づくレンダービュー

Exception Value:  
results() missing 1 required positional argument: 'search_id' 

urls.py

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^landing/', views.search, name='search'), 
    url(r'^results/', views.results, name='results'), 
] 

forms.py

from .models import Apartment 
class Apt(forms.ModelForm): 
    class Meta: 
     model = Apartment 
     fields = ('name') 

views.py

def search(request): 
    if request.method == 'POST': #the form has been submitted 
     form = Apt(request.POST) #bound form 
     if form.is_valid(): #validations have passed 
      name = form.cleaned_data['name'] 
      u = Apt.objects.create(name=name) 
      #REST query will go here. 

      #commit to database 
      u.save() 

      return redirect('results', search_id=u.name) 

    else: #create an unbound instance of the form 
     form = Apt(initial={'name':'name'}) 
    #render the form according to the template, context = form 
    return render(request, 'search/landing.html', {'form':form}) 

def results(request, search_id): 
    search_id = request.POST.get('name') 
    query = get_object_or_404(Apt, pk=search_id) 
    return render(request, 'search/results.html', {'query':query}) 
あなたは

正規表現内のグループは次のように渡された名前付き
url(r'^results/(?P<search_id>.+)/', views.results, name='results'), 

に結果を変更する必要があるURL内

landing.html

{% extends "base_simple.html" %} 

{% block title %}Look up your name{% endblock %} 

{% block main_content %} 

<!-- Intro Header --> 
<header class="intro"> 
    <div class="intro-body"> 
     <div class="container"> 
      <div class="inner cover"> 
      <h1 class="cover-heading">find your name</h1> 
      <form id="searchform" method="POST" action="" accept-charset="utf-8"> 
      {% csrf_token %} 
       <input id="apt" type="text" class="form-control" placeholder="Apartment Name" value="{{ Apt.name }}"> 
       <input type="submit" value="Search" class="btn btn-lg btn-default"> 
      </form> 
      </div>    
     </div> 
    </div> 
</header> 

{% endblock %} 

results.html

{% extends "base_simple.html" %} 

{% block title %}search results{% endblock %} 

{% block main_content %} 

<div class='col-sm-6 col-sm-offset-3'> 

<div class="row"> 
    <div class="col-sm-12"> 
     {% for q in query %} 
     <div class="jumbotron"> 
      <h3>{{ q.name }}</h3> 
     </div> 
     {% endfor %}  
    </div> 
</div> 
<hr/> 

</div> 

{% endblock %} 

答えて

0

ビューへの引数

リダイレクトにはPOSTデータが含まれていないので、search_id = request.POST.get('name')という行も削除してください。

+0

ありがとうございます。 '例外値:\t 引数 '()'とキーワード引数 '{}'を使用して '結果'を取り消します。 1つのパターンが試行されました:['結果/(?P 。+)/'] '着陸URLに行くとき – Jebediah15

+0

urlタグで「結果」ビューを使用していますか?または別の逆に? –

+0

ランディングテンプレートから 'action =" {%url 'results'%} "'を削除する必要があります。検索ビューでフォームの検証を処理しています –

関連する問題