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