【问题标题】:Django, GAE NoReverseMatch errorDjango,GAE NoReverseMatch 错误
【发布时间】:2013-10-15 18:46:31
【问题描述】:

您好,我正在使用支持 Django 1.5 的 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>* 

带有'pages-help' url 的行由Django 突出显示,此外它还标记 装饰器的最后一个 else 作为错误的原因:

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

假设这是错误的原因,为什么它在处理 homepage 视图时没有失败,因为它使用相同的装饰器和相同的参数?

而另一个名为 url 'userprofile-show' 的它也使用相同的装饰器并且在处理模板时没有失败:

@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'),
)

【问题讨论】:

  • 你在根 url conf 中有命名空间吗?
  • @karthikr 我不知道命名空间是什么看我的编辑,这是我的漏洞网址。
  • 这是projecct.pages.views 有效吗?
  • 是的,否则在 pages.homepage 视图中呈现模板时会失败

标签: python google-app-engine django-1.5


【解决方案1】:

问题在于根 url 中的这一行:

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

我刚刚删除了正则表达式末尾的$,因为$,它没有捕获应用程序的urls.py。菜鸟错误。

无论如何感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2015-10-24
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2017-03-14
    • 2017-07-27
    相关资源
    最近更新 更多