到目前为止,我一直(pk)
在我的应用程序的配置文件 URL 中使用用户 ID 作为参数。最近我决定使用username
而不是用户ID所以我更改了以下内容:
网址.py
# This was what i was using previously
url(r'^profile/(?P<uid>\d+)/$', 'app.views.user_profile', name="profile"),
# Changed the above to this.
url(r'^profile/(?P<username>[-\w\d]+)/$', 'app.views.user_profile', name="profile"),
视图.py
# Previous view
@login_required
def user_profile(request, uid):
user = get_object_or_404(models.User, pk=uid)
profile = helpers.get_profile(user)
render_to_response('profile.html', {'profile' : profile})
# Changed the above to
@login_required
def user_profile(request, username):
user = get_object_or_404(models.User, username=username)
profile = helpers.get_profile(user)
render_to_response('profile.html', {'profile' : profile})
直到现在一切都很好。当我尝试访问127.0.0.1:8000/profile/some_username/
而不是以前的访问时,127.0.0.1:8000/profile/some_number/
它工作正常。
我在 中有一个工具栏profile.html
,其中包含以下链接:
/profile/edit/
/profile/settings/
在urls.py
这些 url 中映射到非常简单的视图。比如下面这样。
@login_required
def profile_settings(request):
"""
This view helpers.renders the profile's settings panel
"""
print 'hello'
rec, can = helpers.get_user_or_noprofile(request.user)
if not can is None:
gform = forms.CandidateGeneralSettingsForm(instance=can)
jsform = forms.CandidateJobSearchSettingsForm(instance=can)
data = {'candidate' : can, 'gform' : gform, 'jsform' : jsform }
else:
form = forms.RecruiterSettingsForm(instance=rec)
data = { 'recruiter' : rec, 'form' : form }
return helpers.render(request, 'profile_settings.html', data)
奇怪的部分是在我更改为username
在个人资料网址中使用之后。只要我单击工具栏中的任何链接,我就会看到该404 : Error : No User matches the given query.
页面。
为了调试,我尝试在这些视图中打印一些调试语句,并发现了一些更奇怪的东西。即使我在视图中注释了整个代码并且只写了一条打印语句,也没有打印任何内容。
这让我怀疑问题可能出在login_required
装饰器上。但如果是这种情况,它在 visitng 时如何工作127.0.0.1:8000/profile/some_username/
。
我真的想不出任何可能导致这种情况的原因。任何帮助将不胜感激。谢谢。
PS:另外,JFYI,我正在使用自定义电子邮件身份验证后端,它允许用户通过他们的电子邮件地址而不是用户名登录。