为什么我在 Django 中提交表单时出现 Post 方法错误?

问题描述 投票:0回答:1
This is the error which i m getting when trying to click on the submit button: Page not found (404)
Request Method: POST
Request URL:    http://127.0.0.1:8000/contact/
Using the URLconf defined in career.urls, Django tried these URL patterns, in this order:

admin/
myapp/
signup
/contact
^media/(?P\<path\>.\*)$
The current path, contact/, didn’t match any of these.

I am attaching my file code below:

联系方式.html:

<div class="container my-3">
<h1>Contact Admin</h1>
<form method="post" action="/contact">
{% csrf_token %}
  <div class="form-group">
    <label for="name">Name</label>
    <input type="text" class="form-control" id="name" name="name" aria-describedby="name">
  </div>
  <div class="form-group">
    <label for="email">Email address</label>
    <input type="email" class="form-control" name="email" id="email" aria-        describedby="emailHelp" placeholder="Enter email">
    <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone     else.</small>
  </div>
  <div class="form-group">
    <label for="phone">Phone Number</label>
    <input type="phone" class="form-control" name="phone" id="phone">
  </div>
   <div class="form-group">
    <label for="content">How may we help you?</label>
    <textarea class="form-control" name="content" id="content" cols="30" rows="3"></textarea>
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>


views.py:
def contact(request):
if request.method == "POST":
    name = request.POST['name']
    email = request.POST['email']
    phone = request.POST['phone']
    content = request.POST['content']
    print(name, email, phone, content)
    contact.save()
return render(request, "myapp/contact.html")


models.py:
class Contact(models.Model):
sno = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
phone = models.CharField(max_length=10)
email = models.CharField(max_length=100)
content = models.TextField()

def __str__(self):
    return self.name


admin.py:
from django.contrib import admin

from .models import\*

admin.site.register(Careers)
admin.site.register(Contact)

project urls.py:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = \[
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
path('signup', include('myapp.urls')),
path('/contact', include('myapp.urls')),

\] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

app urls.py:

from django.urls import path, include
from .import views

urlpatterns = \[
path("",views.index,name="CareerHome"),
path("about/",views.about,name="AboutUs"),
path("careers/\<int:myid\>",views.careers,name="Careers"),
path("aptitude/",views.aptitude,name="Aptitude"),
path("feedback/",views.feedback,name="Feedback"),
path("contact/",views.contact,name="Contact"),
path('signup',views.handleSignup,name="handleSignup"),
\]

我觉得我需要更改我的主项目的 urls 文件。我尝试更改它几次,但它仍然给我同样的错误,或者它带我到主页,而没有任何数据保存在我的数据库中。

请建议我应该在项目和应用程序的 url 文件中进行哪些更改来解决此错误

django django-models django-views django-forms django-urls
1个回答
0
投票

您面临的问题与您在 Django 项目中设置 URL 模式的方式有关。问题出在您项目的

urls.py
文件中,您在其中包含
/contact
路线的 URL 模式。

这是您项目中的有问题的行

urls.py
:

path('/contact', include('myapp.urls')),

在 Django 的

path()
函数中,路径前不应包含前导斜杠。定义此 URL 模式的正确方法应该是:

path('contact/', include('myapp.urls')),

请注意,我已经删除了

contact
之前的前导斜杠。

完成此更改后,项目中的

urls.py
应如下所示:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', include('myapp.urls')),
    path('signup/', include('myapp.urls')),
    path('contact/', include('myapp.urls')),  # Corrected URL pattern

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

通过此更正,URL 模式应正确匹配,并且

contact
中的
myapp
视图应可通过
/contact/
URL 访问。

© www.soinside.com 2019 - 2024. All rights reserved.