用户登录到我的应用程序后,我想将该人重定向到他们的个人资料。
不过,我不断收到此错误:重定向Django视图
TypeError at /app/url/username/
profile() got an unexpected keyword argument 'username'
这里是模型:
class UserProfile(models.Model):
user = models.OneToOneField(User)
profile_picture = models.ImageField(upload_to='profile_images', blank = True)
def __str__(self):
return self.user.username
这里就是用户将登录,然后将用户重定向到配置文件中的观点:
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
url = reverse('profile', kwargs={'username': username})
return redirect(url)
else:
return HttpResponse("Please login.")
else:
print("Invalid login details: {0}, {1}".format(username, password))
return HttpResponse("Invalid login details supplied.")
else:
return render(request, 'reviews/login.html', {})
下面是用户简档的视图:
@login_required
def profile(request, user):
user = UserProfile.objects.get(user = request.user)
return render(request, 'reviews/profile.html', {'username':username})
下面是URL模式:
url(r'^profile/(?P<username>\w+)/$', views.profile, name='profile')
有人能告诉我如何登录的用户他们的个人资料重定向?
尝试了两种方法到目前为止建议。我收到了这两个错误:
UserProfile匹配查询不存在。
这里是回溯:
Environment:
Request Method: GET
Request URL: http://localhost:8000/app/profile/username/
Django Version: 1.8.3
Python Version: 3.4.3
Installed Applications:
('grappelli',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'reviews',
'compressor',
'cloudinary')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Traceback:
File "/var/www/nurse/lib/python3.4/site- packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/var/www/nurse/lib/python3.4/site- packages/django/contrib/auth/decorators.py" in _wrapped_view
22. return view_func(request, *args, **kwargs)
File "/var/www/nurse/nurseapp/reviews/views.py" in profile
165. user=UserProfile.objects.get(user = request.user)
File "/var/www/nurse/lib/python3.4/site-packages/django/db/models/manager.py" in manager_method 127. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/var/www/nurse/lib/python3.4/site-packages/django/db/models/query.py" in get 334. self.model._meta.object_name
Exception Type: DoesNotExist at /app/profile/username/
Exception Value: UserProfile matching query does not exist.
好吧,我试过你的方法,并得到这个错误:UserProfile匹配查询不存在。 – user2901792
@ user2901792您是否确定在新用户注册时创建了'UserProfile'对象?对于每个新的User,都应该创建一个新的UserProfile对象。 – ozgur
我有点新手@ozgur。新用户注册时如何创建UserProfile对象?感谢您的回应。 – user2901792