Как получить данные из формы и вставить их в шаблон?
Я пытаюсь сделать поисковый функционал в своем проекте. Есть форма, где человек может ввести название статьи и перенаправить на страницу этой статьи, если она существует. Но она всегда выдает мне "None". Если я, например, ввожу 'CSS', то в терминале выдается такая строка: "GET /search?csrfmiddlewaretoken=yzuY5iPKEJGJgFZE7D9GKoRhSxE2EsUVmVcvJvTuCG6Q2sEBHtiuzUJx2ZPu4fwb&title=CSS HTTP/1.1" 200 1264. Что делать?
Util.py:
import re
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
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")))
def save_entry(title, content):
"""
Saves an encyclopedia entry, given its title and Markdown
content. If an existing entry with the same title already exists,
it is replaced.
"""
filename = f"entries/{title}.md"
if default_storage.exists(filename):
default_storage.delete(filename)
default_storage.save(filename, ContentFile(content))
def get_entry(title):
"""
Retrieves an encyclopedia entry by its title. If no such
entry exists, the function returns None.
"""
try:
f = default_storage.open(f"entries/{title}.md")
return f.read().decode("utf-8")
except FileNotFoundError:
return None
Views.py:
from django.shortcuts import render, redirect
from django import forms
from . import util
from django.http import HttpResponseRedirect
def index(request):
return render(request, "encyclopedia/index.html", {
"entries": util.list_entries()
})
def entry(request, title):
return render(request, "encyclopedia/details.html", {
"entry_info":util.get_entry(title),
"title": title,
})
class SearchForm(forms.Form):
title = forms.CharField(label="title")
def search(request):
if request.method == "GET":
form = SearchForm(request.GET)
if form.is_valid():
title = form.cleaned_data['title']
if title in util.list_entries:
return render(request, "encyclopedia/details.html", {
"form": SearchForm(),
"title": title,
"entry_info": util.get_entry(title)
})
layout.html:
<form action="{% url 'search' %}" method="get">
{% csrf_token %}
{{ form }}
<input type="text" label="title" name="title">
</form>
search.html:
{% extends "encyclopedia/layout.html" %}
{% block body %}
<h1>Search Results for "{{ title }}"</h1>
{% if entry_info %}
<p>{{ entry_info }}</p>
{% else %}
<p>No entry found with the title "{{ title }}".</p>
{% endif %}
{% endblock body %}