【发布时间】:2019-11-01 04:11:34
【问题描述】:
这是另一个涉及 Django 中路径的问题。我无法在任何地方找到我的答案,并且对此进行了大量搜索。
我认为return() 函数正在抛出错误
django.urls.exceptions.NoReverseMatch:找不到“”的反向。 '' 不是有效的视图函数或模式名称。
这是我的代码。
<!-- siren_search.html -->
<div class="row">
<div class="col-sm-8 col-md-7 col-xl-5 mx-auto">
<form id="searchform" action="{% url 'search' %}" method="GET">
<input id="searchbar" name="query" autocomplete="on" onkeyup=getCameras(this.value)
placeholder="Search for the name of a jobsite." class="form-control" type="search" />
</form>
</div>
</div>
#### urls.py
from django.urls import path, re_path
from . import views
urlpatterns = [
path('', views.siren_home, name = 'siren_home'),
re_path(r'^search/$',views.search, name = 'search')
]
#### views.py
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from django.core.exceptions import ObjectDoesNotExist
from .models import CameraSystem, CameraModel, ControlByWeb, JobSite
from django.core import serializers
import json
def siren_home(request):
# some functionality
return render(request, 'siren_search.html', context)
def search(request):
term = request.GET.get('query')
context = {}
# Handle when the user presses enter on the search bar
if 'query' in request.GET and term != '' and not request.is_ajax():
try:
jobsite = JobSite.objects.get(name__iexact = term)
cameras = jobsite.camerasystem_set.all()
context = {
'cameras': cameras,
}
except ObjectDoesNotExist:
pass
return render(request, 'siren_search.html', context) # Django fails here
else:
return render(request, 'siren_search.html', context)
当我在搜索栏上按 Enter 时,它会路由到正确的视图函数并执行所有必要的计算,但它在 render() 函数上失败。我在浏览器中的网址是:http://localhost:8000/siren-search/search/?query=jobsite9。
这是我的回溯链接:http://dpaste.com/2KFAW9M#
【问题讨论】:
-
这个
except ObjectDoesNotExist: pass将在出错时将context字典留空,没有任何“相机”键。 -
你可能是对的,我会更新它,但是当我为
jobsite9打印context时,它会检索我正在寻找的相机并抛出错误。实际上,我的 HTML 文件中似乎有一个被 Django 读取的已注释掉的 url 标记。为什么 Django 会读取注释掉的 HTML 片段?