我已经在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
。我已尝试将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
视图函数中抛出了几个调试语句,但它似乎没有被调用。希望有人能指出我正确的方向......谢谢!
答案 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')),
并解决了问题。