Как правильно обрабатывать получение значения ввода HTML в представление и шаблон URL в Django? - PullRequest
0 голосов
/ 29 марта 2019

Я не могу понять, почему я получаю MultiValueDictKeyError при перенаправлении на страницу, пытающуюся получить доступ к данным из входа в html-файле в views.py. Похоже, что представление не может найти "main_search" в моем HTML-файле. По сути, я пытаюсь получить значение из ввода в html-файле и использовать его для шаблона url и views.py для отображения на этой странице. У меня такое ощущение, что это что-то до боли очевидное, но мне не повезло, выясняя проблему.

Вот ошибка:

Traceback:

Файл "C: \ Users \ stovi \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ utils \ datastructures.py" в getitem 77. list_ = super (). getitem (ключ)

Во время обработки вышеупомянутого исключения ('main_search') произошло другое исключение:

Файл "C: \ Users \ stovi \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ handlers \ exception.py" во внутренней 34. response = get_response (запрос)

Файл "C: \ Users \ stovi \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ handlers \ base.py" в _get_response 126. response = self.process_exception_by_middleware (e, запрос)

Файл "C: \ Users \ stovi \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ handlers \ base.py" в _get_response 124. response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)

Файл "C: \ Users \ stovi \ Desktop \ simple_search \ simple_search_site \ main \ views.py" на странице поиска 31. search = request.POST ["main_search"]

Файл "C: \ Users \ stovi \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ utils \ datastructures.py" в getitem 79. поднять MultiValueDictKeyError (ключ)

Тип исключения: MultiValueDictKeyError at / search = testing / Значение исключения: 'main_search'

views.py:

from django.shortcuts import render
from django.http import HttpResponse
import wikipedia

def homepage(request):
    return render(request=request,template_name="main/search.html")

def wiki_page(request):
    return render(request=request,template_name="main/wikis.html")

def map_page(request):
    return render(request=request,template_name="main/maps.html")

def video_page(request):
    return render(request=request,template_name="main/videos.html")

def book_page(request):
    return render(request=request,template_name="main/books.html")

def game_page(request):
    return render(request=request,template_name="main/games.html")

def movie_page(request):
    return render(request=request,template_name="main/movies.html")

def about_page(request):
    return render(request=request,template_name="main/about.html")

def search_page(request,search):
    search = request.POST["main_search"]
    return HttpResponse(search)

urls.py:

from django.urls import path, include
from . import views

app_name = 'main'

urlpatterns = [
    path('', views.homepage, name='homepage'),
    path('search=<str:search>/',views.search_page,name='searchpage'),
    path('wikis/',views.wiki_page,name='wikipage'),
    path('maps/',views.map_page,name='mappage'),
    path('videos/',views.video_page,name='videopage'),
    path('books/',views.book_page,name='bookpage'),
    path('games/',views.game_page,name='gamepage'),
    path('movies/',views.movie_page,name='moviepage'),
    path('about/',views.about_page,name='aboutpage'),  
]

search.html

<html>
{% extends "main/navbar.html" %}

{% block content %}
<main>  
    <div class="container">
        <div style="margin-top:15%">
            <h1 class="green-text center-align text-darken-4">Simple Search</h1>
        </div>
        <form action='"/search="+document.getElementById("main_s").value' name="search" method="POST">
            <div class="row">
                    <div class="input-field">
                        <input class="green-text text-darken-4 z-depth-0" style="border-color: forestgreen" type="text" id="main_s" name="main_search"/>
                    </div>
            </div>
            <div class="center-align">      
                <a class="waves-effect waves-light btn green darken-4" id="wikis"href="" onclick="this.href='/search='+document.getElementById('main_s').value">Wiki Search</a>
                <a class="waves-effect waves-light btn green darken-4" id="maps">Map Search</a>
                <a class="waves-effect waves-light btn green darken-4">Video Search</a>
                <a class="waves-effect waves-light btn green darken-4">Book Search</a>
                <a class="waves-effect waves-light btn green darken-4">Game Search</a>
                <a class="waves-effect waves-light btn green darken-4">Movie Search</a>
            </div>
        </form>
    </div>
</main>
{% endblock %}
</html>

Любая помощь будет принята с благодарностью. Кроме того, у меня мало опыта в веб-разработке или в Django, так что если есть вещи, которые я делаю неправильно или неправильно, продолжайте и жарьте меня.

1 Ответ

0 голосов
/ 29 марта 2019

Заменить:

search = request.POST["main_search"]

К

search = request.POST.get("main_search","");
...