python - 如何正确处理将 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 方面几乎没有经验,所以如果我做错或不正确的事情,那就继续烤我吧。
解决方案
代替 :
search = request.POST["main_search"]
至
search = request.POST.get("main_search","");
推荐阅读
- python - 读取保存在 Jupyter 文件夹中的 Excel 文件
- python - map函数调用中如何解压参数元组?
- excel - 随机序列的粘性标签
- amazon-web-services - 使用 Terraform 创建多个 EBS 卷的快照
- c++ - 找出导致总和小于或等于阈值的三元组数量的代码给出了错误的输出
- ajax - 带有横向导航栏的 Django 单页网站
- c# - 使用 ASP GridView 中的删除按钮删除行
- python - 如何安装openpyxl==2.2.0b1
- bean-io - 使用 beanio (beanio.org) 编写平面文件。pojo 有父类
- java - 为对象列表优化 fastxml ObjectMapper