#django #django-models #django-rest-framework #django-views
#django #django-модели #django-rest-фреймворк #django-просмотры
Вопрос:
В параметрах url я не передавал имя пользователя, но когда я использовал self.kwars.get('username)
, откуда взялось имя пользователя
В urls.py
path('', views.PostList.as_view(), name='all')
В views.py
class PostList(SelectRelatedMixin, generic.ListView):
model = models.Post
select_related = ('user', 'group')
template_name = 'posts/post_list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
print(self.kwargs.get('username'))
context['user_groups'] = models.Group.objects.filter(members__in=self.kwargs.get('username',''))
return context
Я попытался напечатать self.kwargs.get('username')
, но он печатает «Нет».
но эта строка context['user_groups'] = models.Group.objects.filter(members__in=self.kwargs.get('username',''))
возвращает групповые данные
Комментарии:
1. каков формат URL-адреса для представления списка сообщений? вы могли бы настроить его url(r’^list/(?P<username>[w] )$$’ или аналогичный, чтобы часть URL-адреса стала ключевым словом ввода
2. в качестве примера: docs.djangoproject.com/en/3.1/topics/http/urls/#example
3. Итак, какой URL-адрес настроен для вашего представления? Вы ПРЕДОСТАВИЛИ НЕ весь код. и toy сказал, что он вернул None — поскольку он не установлен. self.kwargs.get(‘username’) = Нет, когда его нет.
4. kwargs — это словарь, при использовании
dictionary.get(key)
которого в python3, еслиkey
его нет в словаре, возвращаетсяNone
значение по умолчанию.5. @pavankumar второй параметр
dict.get
— это значение, которое возвращается, когда ключ (первый параметр) отсутствует вdict
. Здесь вы передаете пустую строку в качестве второго параметраself.kwargs.get('username','')
, и она возвращается, потому что нетusername
ключа. Ваш запрос эквивалентенmodels.Group.objects.filter(members__in='')
Ответ №1:
self.kwargs
это словарь python, при выполнении self.kwargs.get(<key>)
он возвращает значение из словаря, если ключ существует и None
в противном случае. Поскольку ваш self.kwargs
не содержит username
записи, он возвращает None и не выдает ошибку
Например.
foo = dict()
print(foo.get('bar')) # Outputs None