找不到页面(404)请求方法:POST请求URL:http://127.0.0.1:8000 / reg_done

时间:2020-06-22 19:47:44

标签: django forms

        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})

1 个答案:

答案 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_doneurls.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