from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('', views.Index, name='Index'),
path('register/', views.register, name='register'),
path('login/', views.login, name='login'),
path('register/reg_done/', views.reg_done,),
]
以上是我的urls.py。我正在尝试的是让reg_done页面出现,这是在用户单击“提交”按钮以保存妊娠信息之后。但显示此页面未找到。
我试图将表单操作中的路径更改为register / reg_done /。但是随后它在register / register / reg_done中显示了相同的错误。
在HTML中,我给表单操作赋值“ / reg_done”,就是这样。
下面是我的views.py
from django.shortcuts import render
from django.http import HttpResponse
import sqlite3
# Create your views here.
def Index(request):
return render(request, 'index.html')
def register(request):
return render(request, 'register.html')
def login(request):
return render(request, 'login.html')
def reg_done(request):
name = request.POST.get('name')
mail = request.POST.get('mail')
phone = request.POST.get('phone')
psw = request.POST.get('psw')
pswr = request.POST.get('pswr')
all = [name, mail, phone, psw, pswr]
return render(request, 'reg_done.html', {'all':all})
答案 0 :(得分:1)
我假设register
视图处理注册。在register.html
文件的形式中,
做:
<form action="/register/reg_done" method="post">
your form fields here
</form>
如果要使用纯HTML解决方案。如果您想要更多的Django知识,请使用url
模板标记:
<form action="{% url 'reg_done' %}" method="post">
your form fields here
</form>
稍后,我将建议您确保避免“高级开发人员的眼泪”。
在views.py
中,将其添加到文件顶部:
从django.views.decorators.http导入require_POST
然后将reg_done
视图编辑为:
@require_POST
def reg_done(request):
name = request.POST.get('name')
mail = request.POST.get('mail')
phone = request.POST.get('phone')
psw = request.POST.get('psw')
pswr = request.POST.get('pswr')
all = [name, mail, phone, psw, pswr]
return render(request, 'reg_done.html', {'all':all})
接下来,将reg_done
中urls.py
的路径更改为:
路径('register / reg_done /',views.reg_done,name ='reg_done'),
问题出在您对url的使用上。您应该将reg_done
视图引用为/register/reg_done
,而不是register/reg_done
。前者将其视为相对于域名的url,而后者将其视为相对于当前页面的URL。这就是为什么从register
视图转到后者会产生register/register/reg_done
而不是您想要的结果:register/reg_done
。