Создание ссылки на основе вводимых данных в 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 не установлен для всех остальных полей вашей модели.