Создание строки поиска с помощью Django
У меня есть список страниц в формате markdown, отображаемый на индексной странице. Я хочу сделать строку поиска, используя django, которая отображает искомые элементы списка, поэтому я написал этот код для того, чтобы строка поиска получала определенный запрос
в файле views.py:
def index(request):
x = util.list_entries()
for entryy in x:
if 'q' in request.GET:
q = request.GET['q']
data = x.entryy.filter(entryy__icontains = q)
else:
data = x
return render(request, "encyclopedia/index.html", {
"entries": data
})
в urls.py:
urlpatterns = [
path("", views.index, name="index")]
в layout.html:
<form action="{% url 'index' %}" method = "get">
{% csrf_token %}
<input class="search" type="search" name="q" placeholder="Search Encyclopedia">
</form>
util.list_entries() fuction:
def list_entries():
"""
Returns a list of all names of encyclopedia entries.
"""
_, filenames = default_storage.listdir("entries")
return list(sorted(re.sub(r"\.md$", "", filename)
for filename in filenames if filename.endswith(".md")))
когда я ввожу что-либо в строку поиска, появляется вот это
ко мне :
введите описание изображения здесь
так в чем проблема?
поля класса вашей модели - это ваши атрибуты, функция фильтрации пытается добраться до несуществующего атрибута. Если ваша модель называется Entry и поле модели - title, вы можете импортировать Entry в ваши представления, и фильтровать через его поля title, используя __contains
models.py
class Entry(models.Model):
title = models.CharField(null=False, blank=False)
views.py
from myApp.models import Entry
...
def list_entries():
...
data = Entry.objects.filter(title__contains = q)