Создание ссылки на основе вводимых данных в django

<form action="player_profile/"  method="GET">
<div class="row">
<div class="col-12 col-md-9 mb-2 mb-md-0"><input class="form-control" type="text" name="nickname" placeholder="Enter player's nickname..." style="height: 48px;background: var(--bs-body-color);border: 2px solid var(--bs-yellow);font-family: Alata, sans-serif;color: white;"></div>
<div class="col-12 col-md-3"><button class="btn btn-primary btn-lg" type="submit" style="background: var(--bs-body-color);border: 2px solid var(--bs-yellow);font-family: Alata, sans-serif;">Search</button></div>
</div>
</form>

Я хочу создать ссылку на основе ввода никнейма. Я видел способ использования javascript, но как это сделать в django?

def player_profile(request):
    x = request.POST['nickname']
    if(Players.objects.filter(nickname=x).exists()):
        player = Players.objects.get(nickname=x)
        player_id_1 = player.id
        reviews = Reviews.objects.filter(player_id=player_id_1)
        template = loader.get_template('player_profile.html')
        context = {
            'player': player,
            'reviews': reviews,
        }
        return render(request, 'player_profile.html', context)
    else:
        player = Players(nickname=x)
        player.save()
        template = loader.get_template('viewplayer.html')
        context = {
            'player': player,
            'reviews': [],
        }
        return HttpResponse(template.render(context, request))

Вот такой вид я сделал. Я хочу добиться того, чтобы url был основан на нике игрока, например, если я ищу KretoPlayer, это должен быть site.com/player_profile/KretoPlayer

Ваш шаблон url должен работать, так как вы используете fbv и я полагаю, что никнейм уникален для каждого объекта пользователя.

В вашем views.py вы определяете x = request.object.POST['nickname'], но в вашем шаблоне вы имеете метод формы как GET. Исправление может сработать.

Вот как я могу это сделать; я хочу передать форму при запросе сообщения. Этот фрагмент предполагает, что у вас уже есть форма для приема пользовательского ввода.

if request.POST:
   form = NickNameForm() #instance of form
   if form.is_valid():
      x = form.cleaned_data['nickname'] #x is the nickname
      #rest of your code

Я использую post, потому что вы пишете в своем блоке else.

Вы также можете посмотреть на метод get_or_create, который возвращает объект, если есть совпадение, или создает новый, если ни один не совпадает.

В ваших представлениях ваш блок else будет неудачным, если null=True не установлен для всех остальных полей вашей модели.

Вернуться на верх