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 %}
ありがとうございます。 '例外値:\t 引数 '()'とキーワード引数 '{}'を使用して '結果'を取り消します。 1つのパターンが試行されました:['結果/(?P。+)/'] '着陸URLに行くとき –
Jebediah15
urlタグで「結果」ビューを使用していますか?または別の逆に? –
ランディングテンプレートから 'action =" {%url 'results'%} "'を削除する必要があります。検索ビューでフォームの検証を処理しています –