откуда взялось это «имя пользователя», self.kwars.get(‘username’)?

#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