Динамическая маршрутизация URL из html-формы внутри экшена в Django

У меня есть простая форма, которая должна принимать пользовательский ввод и напрямую отправлять пользователя на динамический url, используя этот ввод. Если ввести в форму "111", то пользователь попадет на страницу /number_input=111

Почему-то у меня это не получается, так как я не знаю, как получить прямое значение переменной из формы в представление сразу. Я могу построить его с 2 представлениями, но это выглядит как-то некрасиво и неудобно

Вот что у меня есть на данный момент:

Форма: (внутри index.html)

<form action={% url 'my_view'%} method="POST">
            {% csrf_token %}
            <p><input type="text" name="inp_number" placeholder="Insert Number"/></p>
            <p><input type="submit" value="Submit"/></p>            
        </form>

views.py:

def number_view(request):
    if request.method == 'POST':
        context = {'number': request.POST['inp_number']}
    return render(request, 'number.html', context)

urls.py

from . import views

urlpatterns = [  
    path('number_input=<int:number>/', views.number_view, name='number_view')
]

Динамическая часть (int:number) сделает код неудачным, так как я не отправляю значение из формы, верно? Но я знаю только как отправлять статические значения (т.е. action={% url 'my_view' 111 %}). Как я могу отправить прямое динамическое значение из самой формы (значение, которое пользователь вводит в кнопку отправки)?

number.html

<h2>This page is for number {{ number }}</h2>

Вы можете перенаправить пользователя на правильный URL с помощью redirect.

from django.shortcuts import redirect


def number_view(request):
    if request.method == 'POST':
        sent_number = request.POST['inp_number']
        return redirect('number_view', number=sent_number)

    return render(request, 'number.html', context)

Это должно работать:

from django.shortcuts import redirect


def number_view(request, number):
    if request.method == 'POST':
        number = int(request.POST('inp_number'))
        return redirect('url', number=number)

return render(request, 'number.html', {'number': number})

urls.py

urlpatterns = [
    path('number_input=<int:number>/', views.number_view, name='number_view')
]

и ваша форма:

<form method='POST'>
    {% csrf_token %}
    <p><input type="text" name="inp_number" placeholder="Insert Number"/> 
    </p>
    <p><input type="submit" value="Submit"/></p>            
</form>
Вернуться на верх