Django-grappelli admin:没有反向匹配错误

时间:2011-08-24 21:29:48

标签: django django-admin django-templates django-grappelli

我已经在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_lookup替换为grappelli.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的值是一个空列表[]。我没有在admin.py中定义任何related_lookup_fields
  • 我在grappelli.views.related.related_lookup视图函数中抛出了几个调试语句,但它似乎没有被调用。
  • 我最近没有触及任何模板。

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

7 个答案:

答案 0 :(得分:19)

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

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

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

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

答案 1 :(得分:6)

我遇到了与Django 1.5和Grappelli 2.4.4相同的行为。

要解决此问题,我必须添加

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

urlpatterns

答案 2 :(得分:1)

今天,当我尝试删除admin。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)

答案 3 :(得分:1)

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

pip install --upgrade django-grappelli

答案 4 :(得分:0)

我在网址上遇到了类似的问题,并注意到我需要

{% load url from future %}
如果我想引用url标记,请在模板中

。官方django文档中也提到了这一点:https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#url

答案 5 :(得分: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')),
)

我还有最新的Grappelli(2.6.4)在Django(1.8.2)上运行。顺便说一下,它似乎只有在我尝试访问和添加或编辑视图时才会出现。控制面板和列表视图可以正常工作。

答案 6 :(得分:0)

我添加了

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

并解决了问题。