如何根据以Django形式输入的数据路由到url?

时间:2019-12-09 19:16:24

标签: python django

首先,我想从user接受一个整数输入。收到输入后,我想根据用户输入的内容转到URL。但是,我无法实现它。 这是我的urls.py文件:

urls.py

urlpatterns = [
    path('',views.page1),
    re_path(r'^form/(?P<data>[1-4]{1})',views.page2),
]

这是我的views.py文件:

views.py

from django.shortcuts import render
from .forms import CustomForm1
from django.http import HttpResponse
import requests
# Create your views here.
def page1(request):
    if request.method == 'POST':
        form = CutsomForm1(request.POST)
        if form.is_valid():
            data = form.cleaned_data['data']
    else:
        form = CustomForm1
        data = 0
    return render(request,'homepage/base.html',{'form':form,'data':data})

这是我的forms.py文件:

forms.py

from django import forms

class CustomForm1(forms.Form):
    data = forms.IntegerField(label='data',required=True)

这是HTMl:

HTML

<form method="POST" action="form/{{ data }}">
            {% csrf_token %}
            {{ form.as_p }}
            <ul class="actions">
                <li><input type="submit" value="Send Message" class="primary" /></li>
                <li><input type="reset" value="Clear" /></li>
            </ul>
        </form>

最初,在加载表单时,我的data变量的值为0,但我希望它获取用户输入的值,因此,我可以根据更新后的内容将其路由到所需的url data变量作为上下文传递。

例如,在输入字段中,如果用户输入1,我希望它转到form/1,但是我觉得django模板是静态的,一旦传递就无法更新。我可以实现的方式?

1 个答案:

答案 0 :(得分:1)

在views.py中:

from django.urls import reverse
from django.urls import redirect

def page1(request):
    if request.method == 'POST':
        form = CutsomForm1(request.POST)
        if form.is_valid():
            data = form.cleaned_data['data']
            return redirect(reverse('form_url', kwargs = {'data' : data}))
    else:
        form = CustomForm1
        data = 0
    return render(request,'homepage/base.html',{'form':form,'data':data})

urls.py:

urlpatterns = [
    path('',views.page1),
    re_path(r'^form/(?P<data>[1-4]{1})',views.page2, name = 'form_url')
]

基本上,我从表单中清除了1并使用reverse创建了URL,然后将其重定向到该URL。 了解反向:https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse

[EDIT] (如评论中提到的@mihai),如果您希望此答案有效,请删除action="form/{{ data }}"