Search code examples
pythondjangovs-web-site-project

Having an error in creating contact us page in 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!"
                }
            )
        }

project 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 all my pages are linked like this in navigation bar

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

I have linked the pages after creating the models and made the views and linked these pages in urls.py but it is not finding the contact page it is showing me an error:

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/ 

showing this. Could you show me my mistake I could not notice it.


Solution

  • Change the order of URL patterns. That is, the post_detail URL must be placed on the bottom of the list

    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'),
    
    ]