如何正确处理在 Django 中将 html 输入的值获取到视图和 url 模式中?



我无法弄清楚为什么在重定向到试图从 html 文件中的输入访问数据以 views.py 的页面时出现 MultiValueDictKeyError。视图似乎在我的 html 文件中找不到"main_search"。基本上,我要做的是从 html 文件中的输入中获取值,并将其用于 url 模式和 views.py 显示在该页面上。我有一种感觉,这是显而易见的事情,但我没有运气弄清楚这个问题。

这是错误:

追踪:

文件"C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\utils\datastructures.py"在getitem77中。 list_ = 超级()。获取项(键)

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

文件 "C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py" in inner 34. 响应 = get_response(请求)

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

文件 "C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response 124. 响应 = wrapped_callback(请求、*callback_args、**callback_kwargs)

文件"C:\Users\stovi\Desktop\simple_search\simple_search_site\main\views.py" in search_page 31. 搜索 = 请求。发布["main_search"]

文件"C:\Users\stovi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\utils\datastructures.py"在getitem79中。 引发多值字典键错误(键)

异常类型: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'),  
]

搜索.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方面几乎没有经验,所以如果我做错了或做得不好,那就继续烤我吧。

替换 :

search = request.POST["main_search"]

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

最新更新