这是另一个涉及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#
答案 0 :(得分:0)
真的只值得评论,但我不能在此处格式化。
在您链接到的回溯中,
Template error:
In template /Users/name/Programming/test/webapp/webapp/templates/base.html, error at line 37
Reverse for '' not found. '' is not a valid view function or pattern name.
对我来说,这表明您可能在错误的位置查看,实际上,问题可能甚至出在您编写的代码中。查看base.html的第37行,看看它是否取决于上下文中尚未传递的内容。或尝试暂时暂存base.html。
但是我很困惑,因为所发布的siren_search.html并不表明它正在扩展任何基本模板。
答案 1 :(得分:0)
尝试在模板中提供这样的语法
**"{% url 'appname:search' %}"**
这可能有效