13

我从事 django 项目已有一段时间了,该项目使用 grappelli 作为管理员,今天突然间我的 change_form.html 模板抛出以下错误:

Caught NoReverseMatch while rendering: Reverse for "grp_related_lookup" with arguments '()' and keyword arguments '{}' not found.

有问题的代码行是第 38 行:

37    $.each(related_lookup_fields_fk, function() {
38        $("#id_" + this).grp_related_fk({lookup_url:"{% url grp_related_lookup %}"});
39    });

前面是这段代码:

var related_lookup_fields_fk = {% get_related_lookup_fields_fk adminform.model_admin %};

显然,这{% url grp_related_lookup %}是导致问题的一点。

我不明白模板如何解析grp_related_lookupgrappelli.views.related.related_lookup. 我尝试过替换grp_related_lookupgrappelli.views.related.related_lookup但也没有用。此外,在模板中,违规行如下所示:

$("#id_" + this).grp_related_fk({lookup_url:"{% url grp_related_lookup %}"});

但在错误消息中它看起来像这样:

$("#id_" + this).grp_related_fk({lookup_url:"{% url 'grp_related_lookup' %}"});

我不知道周围的单引号grp_related_lookup是否与问题有关。这就是 django 呈现函数调用的方式吗?是否将字符串传递'grp_related_lookup'给 url 模板标签?如果是这样,是什么原因导致它突然中断?

一些附加信息:

  • 的值related_lookup_fields是一个空列表[]。我没有related_lookup_fields在我的 admin.py 中定义任何内容。
  • 我将几个调试语句放入grappelli.views.related.related_lookup视图函数中,但它似乎没有被调用。
  • 我最近没有碰过任何模板。

希望有人能指出我正确的方向......谢谢!

4

7 回答 7

22

'grappelli.urls'你的 URLconf 中还包含吗?这是我看到的唯一原因会导致此错误。您可以尝试使用python manage.py shell

from django.core.urlresolvers import reverse
print reverse('grp_related_lookup')

如果此行返回正确的 URL,则不应NoReverseMatch在模板中获得 a。

周围的报价grp_related_lookup不应该是一个问题。该{% url %}标签接受带引号和不带引号的字符串作为第一个参数,因此 django 将其规范化为带引号的字符串。这种行为将来会改变:您将能够将模板变量传递给{% url %}使用不带引号的字符串。{% url foo %}并且{% url "foo" %}不会给出相同的结果,有关此内容的详细信息,请参阅1.3 发行说明

于 2011-08-24T21:48:55.310 回答
8

我在 Django 1.5 和 Grappelli 2.4.4 中遇到了同样的行为。

要解决我必须添加的问题

url(r'^grappelli/', include('grappelli.urls')),

urlpatterns.

于 2013-04-03T11:48:53.810 回答
1

今天我遇到了这个问题,当我试图在管理员中删除数据时。Reverse for 'app_list' with arguments '()' and keyword arguments '{'app_label': ''}' not found.

我已经把url(r'^grappelli/', include('grappelli.urls'))urls.py

解决方案很奇怪:只需将 grappelli 更新到最新版本。(我将它从 2.5.6 更新到 2.6.3)

于 2015-01-21T06:14:30.567 回答
1

我昨天遇到了这个问题。我使用的 Django-grapelli 是包含在 FileBrowser 安装中的那个。我通过升级 Django-grapelli 解决了这个问题。只需输入:

pip install --upgrade django-grappelli
于 2015-01-27T09:41:09.047 回答
0

我对 url 有类似的问题,并注意到我需要

{% load url from future %}

如果我想引用 url 标签,请在模板中。官方 django 文档中也提到了这一点:https ://docs.djangoproject.com/en/1.3/ref/templates/builtins/#url

于 2012-02-09T19:00:46.263 回答
0

我似乎遇到了同样的问题,但是当我运行建议的控制台测试时,我得到了这个:

Python 2.7.9 (default, Apr  7 2015, 07:58:25)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.urlresolvers import reverse
>>> print reverse('grp_related_lookup')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/tsantor/.virtualenvs/project_env/lib/python2.7/site-packages/django/core/urlresolvers.py", line 579, in reverse
    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
  File "/Users/tsantor/.virtualenvs/project_env/lib/python2.7/site-packages/django/core/urlresolvers.py", line 496, in _reverse_with_prefix
    (lookup_view_s, args, kwargs, len(patterns), patterns))
NoReverseMatch: Reverse for 'grp_related_lookup' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

我的urls.py样子是这样的:

urlpatterns = patterns(

    # Admin
    url(r'^grappelli/', include('grappelli.urls')),
    url(r'^admin/', include(admin.site.urls), name="admin"),

    # main views
    #url(r'^$', RedirectView.as_view(url='/admin'), name='home'),

    # API
    url(r'^api/', include('api.urls', namespace='api')),
)

我还在 Django (1.8.2) 上运行了最新的 Grappelli (2.6.4)。顺便说一句,它似乎只发生在我尝试访问和添加或编辑视图时。控制面板和列表视图工作。

于 2015-05-26T19:57:49.083 回答
0

我添加了

path('grappelli/', include('grappelli.urls')),

并解决了问题。

于 2020-01-20T22:42:06.950 回答