search_view() отсутствует 1 требуемый позиционный аргумент: ‘slug’

#python #django #django-models #django-views

#python #django #django-модели #django-просмотры

Вопрос:

ошибка

Ошибка типа в / chat/search/
search_view() отсутствует 1 требуемый позиционный аргумент: ‘slug’
Метод запроса: POST
URL запроса: http://127.0.0.1:8000/chat/search /
Версия Django: 3.0.7 Тип исключения: TypeError
Значение исключения:
search_view() отсутствует 1 требуемый позиционный аргумент: ‘slug’

моя модель:

 class UserProfile(models.Model)
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
    slug = models.SlugField(blank=True)
    image = models.ImageField(default='face.jpg', upload_to='images/avtar')
    friends = models.ManyToManyField("UserProfile", blank= True)
    
    def __str__(self):
        return self.user.username

    def get_absolute_url(self):
        return "/chat/{}".format(self.slug)
    
    def last_seen(self):
        return cache.get('last_seen_%s' % self.user.username)
    
def post_save_user_model_receiver(sender, instance, created, *args, **kwargs):
    if created:
        try:
            Profile.objects.create(user=instance)
        except:
            pass

post_save.connect(post_save_user_model_receiver, sender=settings.AUTH_USER_MODEL)
  

Мои URL-адреса:

 url(r'^(?P<slug>[w-] )/$',search_view),
url(r'^friend-request/send/(?P<id>[w-] )/$', send_friend_request),
url(r'^friend-request/cancel/(?P<id>[w-] )/$', cancel_friend_request),
  

мой взгляд:

 def search_view(request, slug):

    p = UserProfile.objects.filter(slug=slug).first()
    u = p.user;print(u)
    sent_friend_requests = FriendRequest.objects.filter(from_user=p.user)
    rec_friend_requests = FriendRequest.objects.filter(to_user=p.user)
    friends = p.friends.all()
    # is this user our friend
    button_status = 'none'
    if p not in request.user.profile.friends.all():
        button_status = 'not_friend'
    
        # if we have sent him a friend request
        if len(FriendRequest.objects.filter(
            from_user=request.user).filter(to_user=p.user)) == 1:
                button_status = 'friend_request_sent'
    
    if request.method =='POST':
        query = request.POST.get('search')
        results = User.objects.filter(username__contains=query) 
    
    context = {
        'results':results,
        'u': u,
        'button_status': button_status,
        'friends_list': friends,
        'sent_friend_requests': sent_friend_requests,
        'rec_friend_requests': rec_friend_requests
    }

    return render(request, 'chat/search.html', context)
  

Ответ №1:

Функция просмотра search_view(request, slug) ищет slug аргумент в определении функции, который не найден в URL-адресе запроса http://127.0.0.1:8000/chat/search/

Итак, URL-адрес запроса должен быть таким: http://127.0.0.1:8000/chat/search/some_slug не похож http://127.0.0.1:8000/chat/search/ . Добавьте переменную slug в конец URL-адреса.

Ответ №2:

У вас есть переменная в вашем URL: url(r'^(?P[w-] )/$',search_view) , вам нужно использовать эту переменную в URL запроса:http://127.0.0.1:8000/chat/search /, но его там нет, вот о чем говорит эта ошибка