2013-10-08 80 views
0

嗨,我是用的Django 1.5支持,該問題的谷歌應用程序引擎項目的工作是這樣的:的Django,GAE NoReverseMatch錯誤

我寫了一個輔助裝飾打電話給我用谷歌的用戶作爲一個參數的意見:

def login(required=True): 
    def _wrapper(f): 
     @wraps(f) 
     def __wrapper(request, *args, **kwargs): 
      user = users.get_current_user() 
      if required and user: 
       return f(request, user, *args, **kwargs) 
      elif required and not user: 
       url = users.create_login_url(request.get_full_path()) 
       return HttpResponsePermanentRedirect(url) 
      elif user: 
       return f(request, user, None, *args, **kwargs) 
      else: 
       url = users.create_login_url(request.get_full_path()) 
       return f(request, user, url, *args, **kwargs) 
     return __wrapper 
    return _wrapper 

如果視圖需要它會檢查當前谷歌用戶登錄用戶,認爲可能不需要它,它只是調用視圖的話。現在,我已經有了新的兩種觀點:

pages.urls.py

urlpatterns = patterns('projecct.pages.views', 
    url(r'^help/$', 'hlp', name='pages-help'), 
) 

意見

@login(required=False) 
def homepage(request, user, login_url): 
    """ 
    Site wide home page 
    """ 
    return render_to_response(
     'pages/home.html', 
     {'user': user, 'login_url': login_url, }) 

@login(required=False) 
def hlp(request, user, login_url): 
    return render_to_response(
     'pages/help.html', 
     {'user': user, 'login_url': login_url}) 

錯誤:

NoReverseMatch at/
Reverse for 'pages-help' with arguments '()' and keyword arguments '{}' not found. 
Request Method: GET 
Request URL: http://localhost:8080/ 
Django Version: 1.5 
Exception Type: NoReverseMatch 
Exception Value:  
Reverse for 'pages-help' with arguments '()' and keyword arguments '{}' not found. 

...

Reverse for 'pages-help' with arguments '()' and keyword arguments '{}' not found. 


{% if user %} 
    <a href="{% url 'userprofile-show' %}">...</a> 
{% else %} 
    <a href="{{ login_url }}">Login</a> 
{% endif %} 
*<a href="{% url 'pages-help' %}">...</a>* 

與「頁面,幫助網址中的線是由Django強調,aditionaly它標誌着 最後其他裝飾爲錯誤的原因的:

else: 
    url = users.create_login_url(request.get_full_path()) 
    return f(request, user, url, *args, **kwargs) 

假設這是錯誤的原因爲什麼在處理homepage視圖時沒有失敗,因爲它使用相同的裝飾器和相同的參數?

而另一個名爲url 'userprofile-show'它也使用同樣的裝飾,當它處理tamplate沒有失敗:

@login(required=True) 
def show(request, current_user): 
    ... 

我的想法,任何幫助將不勝感激。

編輯。 新增urls.py

urlpatterns = patterns('', 
    url(r'^profile/', include('project.userprofile.urls')), 
    # Static pages 
    url(r'^pages/$', include('project.pages.urls')), 
    url(r'^$', 'project.pages.views.homepage', name='homepage'), 
) 
+0

在root url conf中有一個名稱空間嗎? – karthikr

+0

@karthikr我不知道命名空間是什麼看到我的編輯,這是我擁有的漏洞。 – loki

+0

,這是'projecct.pages.views'有效嗎? – karthikr

回答

0

問題是這一行根的URL根:

url(r'^pages/$', include('project.pages.urls')), 

我只是刪除了$在正則表達式的結束,它沒有捉住應用程序的urls.py因爲$。 Noob錯誤。

無論如何感謝您的幫助。