【问题标题】:Django render() - Reverse for '' not found. '' is not a valid view function or pattern nameDjango 渲染() - 未找到“”的反向。 '' 不是有效的视图函数或模式名称
【发布时间】: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 片段?

标签: python django


【解决方案1】:

尝试在模板中给出这样的语法

             **"{% url 'appname:search' %}"**

这可能有效

【讨论】:

    【解决方案2】:

    真的只值得评论,但我不能在那里格式化。

    在您链接到的回溯中,

    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 并未显示它正在扩展任何基本模板。

    【讨论】:

    • 我正在扩展基本模板。我想我刚刚发现了问题所在。我的siren_search.html 文件中有&lt;!-- {% url '' camera.asset_name %}--&gt;,我认为Django 正在阅读它,因为我刚刚删除了那段代码,它又开始工作了。我想这现在提出了一个问题,为什么 Django 会读取注释掉的 HTML?
    • {{whatever}} 放在HTML 注释中然后在浏览器中使用“查看页面源代码”可能是一种有用的调试技术。所以我很高兴它做到了。
    • 如果你想忽略{% url %}标签,你需要使用Django comments。 Django 不会将模板解析为 html - 请记住,渲染的 Django 模板不一定返回 html,例如它可以为电子邮件返回纯文本。
    • 更一般地说,Django 模板语言不限于 HTML。我偶尔会替换成 Javascript。其他人用它来生成.csv 文件,甚至是 PostScript。
    猜你喜欢
    • 2019-04-06
    • 2021-04-21
    • 2018-01-25
    • 2019-06-27
    • 2018-11-19
    • 2021-06-11
    • 1970-01-01
    • 2019-04-21
    • 2021-07-18
    相关资源
    最近更新 更多