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

hea*_*ved 12 django django-templates django-admin django-grappelli

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

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

令人讨厌的代码行是第38行:

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

之前是这段代码:

var related_lookup_fields_fk = {% get_related_lookup_fields_fk adminform.model_admin %};
Run Code Online (Sandbox Code Playgroud)

显然这是{% 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 %}"});
Run Code Online (Sandbox Code Playgroud)

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

$("#id_" + this).grp_related_fk({lookup_url:"{% url 'grp_related_lookup' %}"});
Run Code Online (Sandbox Code Playgroud)

我不知道周围的单引号grp_related_lookup是否与问题有关.这是django如何呈现函数调用?它是否将字符串传递'grp_related_lookup'给url模板标记?如果是这样的话,可能会导致这种情况突然破裂?

一些额外的信息:

  • 值为related_lookup_fields空列表[].我没有related_lookup_fields在admin.py中定义任何内容.
  • 我把几个调试语句扔到了grappelli.views.related.related_lookupview函数中,它似乎没有被调用.
  • 我最近没有触及过任何模板.

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

小智 20

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

from django.core.urlresolvers import reverse
print reverse('grp_related_lookup')
Run Code Online (Sandbox Code Playgroud)

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

周围的报价grp_related_lookup不应该是一个问题.该{% url %}标签同时接受报价,不带引号的字符串作为第一个参数,所以它的Django到正常化引用的字符串.这种行为将来会发生变化:您将能够将模板变量传递给{% url %}使用不带引号的字符串.{% url foo %}并且{% url "foo" %}不会给出相同的结果,有关详细信息,请参阅1.3发行说明.


w17*_*7us 6

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

要解决我必须添加的问题

url(r'^grappelli/', include('grappelli.urls')),
Run Code Online (Sandbox Code Playgroud)

urlpatterns.