2013-10-08 4 views
0

Привет Я работаю с приложением двигателя проекта Google с поддержкой Django 1.5 и проблема выглядит следующим образом:Джанго, GAE NoReverseMatch ошибка

Я написал помощник декоратора, чтобы назвать свои взгляды с пользователем Google в качестве параметра :

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 

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

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>* 

Строка с «страницы-справки» URL является подсвечивается 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

У вас есть пространство имен в корневом URL-адресе? – karthikr

+0

@karthikr Я не знаю, какое пространство имен видит мое редактирование, это мои URL-адреса. – loki

+0

и является ли это 'projecct.pages.views' действительным? – karthikr

ответ

0

Проблема была с этой линией в корневых URLs:

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

Я просто удалил $ в конце регулярного выражения, он не ловя app's urls.py по причине это $. Ошибка Нооба.

В любом случае спасибо за помощь.

Смежные вопросы