【问题标题】:Django-grappelli admin: No reverse match errorDjango-grappelli 管理员:没有反向匹配错误
【发布时间】:2011-11-03 04:42:01
【问题描述】:

我从事 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_lookup 解析为grappelli.views.related.related_lookup。我尝试用grappelli.views.related.related_lookup 替换grp_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 视图函数中添加了几个调试语句,但它似乎没有被调用。
  • 我最近没有接触任何模板。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,我的 URLconf 中有 ( r'^grappelli/', include('grappelli.urls') )。我在shell中尝试了你的建议,它也抛出了一个错误。感谢您对 url 模板标签的提醒。
    • 有趣...尝试打印所有 URL 模式,看看它是什么样子?使用类似stackoverflow.com/questions/1828187/…
    • 谢谢!仔细检查我的 URL 模式是一个不错的选择。实际上缺少 grappelli url 模式。现在我需要弄清楚如何以及为什么......
    • 以为我会跟进...实际上包括了 grappelli 网址。我昨天弄错了。不管怎样,今天早上我在这个问题上用了大约半个小时的时间来解决这个问题,当时它神奇地自行修复了。对此感觉不太好,但它已修复,所以这很好。感谢您的帮助。
    • 我遇到了类似的问题,结果证明这是问题所在。
    【解决方案2】:

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

    为了解决这个问题,我必须添加

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

    urlpatterns

    【讨论】:

      【解决方案3】:

      我今天遇到了这个问题,当我试图删除管理员中的数据时。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)

      【讨论】:

      • 感谢您记录此内容!升级到 Django 1.7 后,我遇到了同样的问题。我的营销团队正在敲门问为什么管理工具坏了。
      【解决方案4】:

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

      pip install --upgrade django-grappelli
      

      【讨论】:

        【解决方案5】:

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

        {% load url from future %}
        

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

        【讨论】:

          【解决方案6】:

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

          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)。顺便说一句,它似乎只发生在我尝试访问和添加或编辑视图时。控制面板和列表视图工作。

          【讨论】:

            【解决方案7】:

            我加了

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

            并解决了问题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-10-21
              • 2017-04-25
              • 2013-01-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多