首页 > 解决方案 > 如何正确处理将 html 输入值获取到 Django 中的视图和 url 模式?

问题描述

我无法弄清楚为什么在重定向到尝试从 html 文件中的输入访问数据到 views.py 的页面时收到 MultiValueDictKeyError。看来视图在我的 html 文件中找不到“main_search”。基本上,我要做的是从 html 文件中的输入中获取值,并将其用于 url 模式并在 views.py 中显示在该页面上。我有一种感觉,这是一件非常明显的事情,但我没有运气解决这个问题。

这是错误:

追溯:

getitem 77 中的文件“C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\utils\datastructures.py” 。list_ = super()。获取项目(键)

在处理上述异常('main_search')期间,发生了另一个异常:

内部 34 中的文件“C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py”。 response = get_response(request)

_get_response 126 中的文件“C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py”。响应 = self.process_exception_by_middleware(e,请求)

_get_response 124 中的文件“C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py”。 response = Wrapped_callback(request, *callback_args, **callback_kwargs)

search_page 31 中的文件“C:\Users\stovi\Desktop\simple_search\simple_search_site\main\views.py”。search = request.POST["main_search"]

getitem 79 中的文件“C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\utils\datastructures.py” 。引发 MultiValueDictKeyError(key)

异常类型:MultiValueDictKeyError at /search=testing/ 异常值:'main_search'

视图.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)

网址.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'),  
]

搜索.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>

任何帮助,将不胜感激。另外,我在 Web 开发或 Django 方面几乎没有经验,所以如果我做错或不正确的事情,那就继续烤我吧。

标签: pythondjangodjango-views

解决方案


代替 :

search = request.POST["main_search"]

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

推荐阅读