Django-grappelli admin: нет ошибки обратного матча

я уже некоторое время работаю над проектом 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 - пустой список []. Я не определяю никакого related_lookup_fields в моем admin.py.
  • я бросил пару операторов отладки в grappelli.views.related.related_lookup функция просмотра, и она, похоже, не вызывается.
  • в последнее время я не касался ни одного из шаблонов.

надеюсь, кто-то может мне точку в правильном направлении... Спасибо!

6 ответов


у вас еще есть 'grappelli.urls' включено в ваш URLconf? Это единственная причина, по которой я вижу, что вызовет эту ошибку. Вы можете попробовать использовать python manage.py shell:

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

если эта строка возвращает правильный URL, вы не должны получить NoReverseMatch в шаблоне.

в кавычки grp_related_lookup не должно быть проблемой. The {% url %} - тег поддерживает как котируемые и некотируемые строки в качестве первого аргумента, так что Джанго нормализует его в кавычках. Это поведение изменится в будущем: вы сможете передать переменные шаблона в {% url %} использование строк без кавычек. {% url foo %} и {% url "foo" %} не даст тот же результат, увидеть 1.3 выпуске подробнее об этом.


я столкнулся с таким же поведением с Django 1.5 и Grappelli 2.4.4.

чтобы исправить проблему, я должен был добавить

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

to urlpatterns.


я столкнулся с этой проблемой сегодня, когда попытался удалить данные в admin.Reverse for 'app_list' with arguments '()' and keyword arguments '{'app_label': ''}' not found.

Я поставил url(r'^grappelli/', include('grappelli.urls')) in urls.py

решение довольно странное: просто обновите grappelli до последней версии. (Я обновил его с 2.5.6 до 2.6.3)


я столкнулся с этой проблемой вчера. Django-grapelli, который я использовал, был включен в установку FileBrowser. Я решил проблему, обновив Django-grapelli. Просто введите:

pip install --upgrade django-grappelli

У меня была аналогичная проблема с urls и заметил, что мне нужно

{% load url from future %}

в шаблоне, если я хочу процитировать теги url. Это также упоминается в официальной документации django:https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#url


кажется, я сталкиваюсь с этой же проблемой, но когда я запускаю предлагаемый консольный тест, я получаю следующее:

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). Кстати, кажется, это происходит только тогда, когда я пытаюсь получить доступ и добавить или отредактировать представление. Панель управления и представления списка работают.