Форма Django не отображается

#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 значение