models.py:
from django.contrib.auth.models import User
class Location(models.Model):
user = models.ForeignKey(User)
views.py
class UserLocationsListView(ListView):
model = Location
context_object_name = 'user_locations'
def get_queryset(self):
user_locations = Location.objects.filter(user=self.request.user)
paginator = Paginator(user_locations, 10)
page = self.request.GET.get('page')
try:
user_locations = paginator.page(page)
except PageNotAnInteger:
user_locations = paginator.page(1)
except EmptyPage:
user_locations = paginator.page(paginator.num_pages)
return user_locations
urls.py:
url(r'^member/user_locations/$', UserLocationsListView.as_view(), name='user_locations'),
我希望用户能够在页面上看到其所有位置。
似乎我在使用REQUEST时遇到了问题(在过滤时以及在页面定义中)
我该如何解决?
谢谢!
Environment:
Request Method: GET
Request URL: http://localhost:8000/member/user_locations/
Django Version: 1.8.6
Python Version: 2.7.11
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.instagram',
'allauth.socialaccount.providers.twitter',
'crispy_forms',
'findlocation_app')
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 "C:\commercial_projects\fl\lib\site-packages\django\core\handlers\base.py" in get_response
164. response = response.render()
File "C:\commercial_projects\fl\lib\site-packages\django\template\response.py" in render
158. self.content = self.rendered_content
File "C:\commercial_projects\fl\lib\site-packages\django\template\response.py" in rendered_content
133. template = self._resolve_template(self.template_name)
File "C:\commercial_projects\fl\lib\site-packages\django\template\response.py" in _resolve_template
88. new_template = self.resolve_template(template)
File "C:\commercial_projects\fl\lib\site-packages\django\template\response.py" in resolve_template
78. return loader.select_template(template, using=self.using)
File "C:\commercial_projects\fl\lib\site-packages\django\template\loader.py" in select_template
64. return engine.get_template(template_name, dirs)
File "C:\commercial_projects\fl\lib\site-packages\django\template\backends\django.py" in get_template
30. return Template(self.engine.get_template(template_name, dirs))
File "C:\commercial_projects\fl\lib\site-packages\django\template\engine.py" in get_template
167. template, origin = self.find_template(template_name, dirs)
File "C:\commercial_projects\fl\lib\site-packages\django\template\engine.py" in find_template
141. source, display_name = loader(name, dirs)
File "C:\commercial_projects\fl\lib\site-packages\django\template\loaders\base.py" in __call__
13. return self.load_template(template_name, template_dirs)
File "C:\commercial_projects\fl\lib\site-packages\django\template\loaders\base.py" in load_template
17. template_name, template_dirs)
File "C:\commercial_projects\fl\lib\site-packages\django\template\loaders\filesystem.py" in load_template_source
38. return fp.read(), filepath
File "C:\commercial_projects\fl\lib\codecs.py" in decode
314. (result, consumed) = self._buffer_decode(data, self.errors, final)
Exception Type: UnicodeDecodeError at /member/user_locations/
Exception Value: 'utf8' codec can't decode byte 0xcf in position 748: invalid continuation byte
您的问题与追溯完全无关。追溯显示您的视图所使用的模板中的字符无效(在748位)。去掉它。
视图本身看起来还不错。self.request.user
正如您已经在做的那样,使用户使用该方法的正确方法是。
您可以略微简化该方法-您无需在该方法中进行分页,ListView
它将为您解决这一问题。
class UserLocationsListView(ListView):
...
paginate_by = 10
def get_queryset(self):
queryset = super(UserLocationsListView, self).get_queryset()
queryset = queryset.filter(user=self.request.user)
return queryset
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句