首先,我想从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模板是静态的,一旦传递就无法更新。我可以实现的方式?
答案 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 }}"
。