在Django中创建“与我们联系”页面时出错?

问题描述

models.py

class Contact(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    message = models.TextField(max_length=400)

    def __str__(self):
        return f"{self.first_name} {self.last_name}"

forms.py

class ContactForm(ModelForm):
    class Meta:
        model = Contact
        fields = ["first_name","last_name","message"]
        widgets = {
            "message": Textarea(
                attrs={
                    "placeholder": "Xabaringizni kiriting!"
                }
            )
        }

项目urls.py

from django.contrib import admin
from django.conf.urls import url,include
from . import views


    urlpatterns = [
        url(r'^$',views.HomePage.as_view(),name='home'),url(r'^admin/',admin.site.urls),url(r'^blog/',include('blog.urls',namespace='blog')),#url(r'^blog/',include('django.contrib.auth.models.urls')),url(r'^about/',views.AboutPage.as_view(),name='about'),#url(r'^contact/',views.ContactPage.as_view(),name='contact'),]

blog / urls.py

from django.urls import path
from . import views
from . import models

#Template tagging
app_name = 'blog'

urlpatterns = [
    path('',views.PostList.as_view(template_name='index.html'),name='index'),path('<slug:slug>/',views.post_detail,name='post_detail'),path("contact/",views.ContactCreate.as_view(template_name='contact1.html'),name="contact"),path("thanks/",views.thanks,name="thanks"),]

blog / views.py

from django.shortcuts import render,get_object_or_404
from django.views import generic
from django.views.generic import ListView,DetailView,CreateView
from .models import Post,Contact
from django.urls import reverse_lazy
from django.http import HttpResponse
from .forms import CommentForm,ContactForm


class ContactCreate(CreateView):
        model = Contact
        form_class = ContactForm
        success_url = reverse_lazy("thanks")
    
    
    def thanks(request):
        return HttpResponse("Rahmat Siz bilan tez orada bog`lanamiz!")

contact_page / contact1.html我的所有页面在导航栏中都这样链接

 <nav class="navbar navbar-expand-sm navbar-dark bg-dark">
            <div class="container">
              <a href="{% url 'home' %}" class="navbar-brand"><i class="fas fa-balance-scale">iLawyer.uz</i></a>
              <button class="navbar-toggler" data-toggle="collapse" data-target="#navbarCollapse">
                <span class="navbar-toggler-icon"></span>
              </button>
              <div class="collapse navbar-collapse" id="navbarCollapse">
                <ul class="navbar-nav ml-auto">
                  <li class="nav-item">
                    <a href="{% url 'home' %}" class="nav-link">Bosh sahifa</a>
                  </li>
                  <li class="nav-item">
                    <a href="{% url 'about' %}" class="nav-link">Biz haqimizda</a>
                  </li>
                  <li class="nav-item">
                    <a href="{% url 'blog:index' %}" class="nav-link">Blog</a>
                  </li>
                  <li class="nav-item">
                    <a href="{% url 'blog:contact' %}" class="nav-link">Biz bilan bog'laning</a>
                  </li>
                </ul>
              </div>
            </div>
          </nav>

    <form method="POST" action="{% url 'blog:contact' %}">
            {% csrf_token %}
            {{ form }}
            <button type="submit">SEND</button>
        </form>

创建模型后,我已经链接页面,并创建了视图,并在urls.py中链接了这些页面,但是找不到联系页面,它显示一个错误

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/blog/contact/
Raised by:  blog.views.post_detail
in the terminal: Not Found: /blog/contact/ 

显示此。 你能告诉我我的错误我没注意到吗。

解决方法

更改URL模式的顺序。也就是说,必须将 post_detail URL放在列表的底部

urlpatterns = [
    path('',views.PostList.as_view(template_name='index.html'),name='index'),path("contact/",views.ContactCreate.as_view(template_name='contact1.html'),name="contact"),path("thanks/",views.thanks,name="thanks"),path('<slug:slug>/',views.post_detail,name='post_detail'),

]
,

在您的blog/urls.py文件中,您将模板名称称为'contact1.html'。将其更改为contact_page/contact1.html