#django #django-forms
#django #django-forms
Вопрос:
Я новичок в django и пытаюсь отобразить форму в html-файле, но не вижу полей. Я могу видеть все, кроме формы.
Задача:
Разрешить пользователю вводить запрос в поле поиска на боковой панели для поиска записи в энциклопедии.
views.py
def index(request):
entries = util.list_entries()
searched = []
if request.method == "POST":
form = Search(request.POST)
if form.is_valid():
item = form.cleaned_data["item"]
for i in entries:
if item in entries:
page = util.get_entry(item)
page_converted = markdowner.convert(page)
context = {
'page': page_converted,
'title': item,
'form': Search()
}
return render(request, "encyclopedia/entry.html", context)
if item.lower() in i.lower():
searched.append(i)
context = {
'searched': searched,
'form': Search()
}
return render(request, "encyclopedia/search.html", context)
else:
return render(request, "encyclopedia/index.html", {"form": form})
else:
return render(request, "encyclopedia/index.html", {
"entries": util.list_entries(), "form":Search()
})
layout.html
<div class="sidebar col-lg-2 col-md-3">
<h2>Wiki</h2>
<form method="post" action="{% url 'index' %}">
{% csrf_token %}
{{form.item}}
</form>
<div>
<a href="{% url 'index' %}">Home</a>
</div>
<div>
<a href="{% url 'create' %}">Create New Page</a>
</div>
<div>
<a href="{% url 'random' %}">Random Page</a>
</div>
{% block nav %}
{% endblock %}
</div>
Класс поиска
class Search(forms.Form):
items = forms.CharField(widget=forms.TextInput(attrs={'class': 'myfieldclass', 'placeholder': 'search'}))
Комментарии:
1. Не должно
layout.html
бытьindex.html
, или это опечатка? Вы не отправляете ‘layout.html ‘ что-нибудь там2. Вы должны предоставить результат в виде ошибки или отображаемого html и пожалуйста, исправьте отступ
3. 2 разных файла. index.html расширить layout.html
4.
form
не определено, когда метод != ‘POST’5. @GAEfan я добавляю ответ об этом, можете ли вы увидеть мой ответ для редактирования 🙂 и улучшения
Ответ №1:
Попробуйте {{ form.as_p }}
или просто {{ form }}
вместо {{ form.item }}
.
Я думаю, item
что это ни на что не ссылается.
Обновить:
В вашем Search
классе form допущена опечатка. Имя поля должно быть item
not items
.
Комментарии:
1. отсюда
item = form.cleaned_data["item"]
2. @EdyEduard ты пробовал то, что я сказал?
3. ДА. форма появилась, но теперь я получаю ошибку ключа в Item
item = form.cleaned_data["item"]
4. @EdyEduard Обновите вопрос и добавьте содержимое
Search
класса form. Она должна содержать поле,item
в противном случае вы получите егоKeyError
всякий раз, когда попытаетесь его получить.5. @EdyEduard в имени поля
s
класса form есть лишнееSearch
значение