您好我正在使用支持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'网址的行由Django
突出显示,aditionaly标记
作为错误原因的装饰器的最后一个其他:
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'),
)
答案 0 :(得分:0)
问题在于根网址中的这一行:
url(r'^pages/$', include('project.pages.urls')),
我刚刚删除了正则表达式末尾的$
,因为urls.py
而没有抓住应用$
。 Noob错误。
无论如何,谢谢你的帮助。