2011-08-24 80 views
10

我一直在使用一個Django項目一段時間,現在使用grappelli的管理員和突然今天突然我的change_form.html模板拋出以下錯誤:Django-grappelli管理員:沒有反向匹配錯誤

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_lookupgrappelli.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視圖函數投擲了幾個調試語句,它似乎沒有被調用。
  • 我最近沒有碰過任何模板。

希望有人能指點我正確的方向......謝謝!

回答

19

你還有'grappelli.urls'包含在你的URLconf中嗎?我看到的唯一原因會導致這個錯誤。您可以嘗試使用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瞭解有關詳情。

+0

是的,我在我的URLconf中有'(r'^ grappelli /',include('grappelli.urls'))''。我在shell中嘗試了你的建議,它也拋出了一個錯誤。感謝有關url模板標籤的提示。 – heavilyinvolved

+0

有趣...嘗試打印所有的URL模式,看看它是什麼樣子?使用像http://stackoverflow.com/questions/1828187/determine-complete-django-url-configuration – brutasse

+0

謝謝!仔細檢查我的URL模式是一個很好的電話。 grappelli網址模式實際上缺失。現在我需要弄清楚如何以及爲什麼... – heavilyinvolved

6

我遇到了與Django 1.5和Grappelli 2.4.4相同的行爲。

要解決,我不得不問題添加

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

urlpatterns

1

我今天遇到了這個問題,當時我試圖刪除admin中的數據。 Reverse for 'app_list' with arguments '()' and keyword arguments '{'app_label': ''}' not found.

我已經把url(r'^grappelli/', include('grappelli.urls'))在urls.py

的解決方案是很奇怪:剛更新格拉佩利到最新版本。 (我把它從2.5.6更新到2.6.3)

+0

感謝您爲此編寫文檔!升級到Django 1.7後,我遇到了同樣的問題。我的營銷團隊正在打開我的門,詢問爲什麼管理工具被破壞。 – Civilian

1

昨天我遇到了這個問題。我使用的Django-grapelli是包含在FileBrowser安裝中的。我通過升級Django-grapelli解決了這個問題。只需鍵入:

pip install --upgrade django-grappelli 
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)上運行。順便說一下,它似乎只發生在我嘗試訪問和添加或編輯視圖時。控制面板和列表視圖正常工作。