Make your urls patterns at pet app 

path('pet<slug:slug>/', pet_views.PetDetailView.as_view(), 
name='pet_details'),] 

On Wednesday, November 30, 2022 at 2:52:36 PM UTC+1 mi...@spinningcow.xyz 
wrote:

> Code is first, query is last (below). Thanks in advance.
>
>
> *home directory urls.py*
> from django.contrib import admin
> from django.urls import path,include
> from . import views
>
> urlpatterns = [
>     path("admin/", admin.site.urls, name='admin'),
>     path("", views.Home.as_view(), name="home"),
>     path("pet/", include('pet.urls')),
> ]
>
>
>
> *home directory views.py*
> from django.shortcuts import render
> from django.views.generic.detail import DetailView
> from django.views.generic.base import TemplateView
> from django.views.generic import View
>
> class Home(TemplateView):
>     template_name = 'home.html'
>
>
>
> *app "pet" urls.py*
> from django.contrib import admin
> from django.urls import path
> from . import views as pet_views
> from .models import Pet
>
> urlpatterns = [
>     path('<slug:slug>', pet_views.PetDetailView.as_view(), 
> name='pet_details'),]
>
>
>
> *app "pet" views.py*
> from django.shortcuts import render
> from django.views.generic.detail import DetailView
> from pet.models import Pet
>
> class PetDetailView(DetailView):
>     model = Pet
>     slug_url_kwarg = 'slug'
>     slug_field = 'slug'
>
>
>
>
> *app "pet" models.py*
> from django.db import models
> from django.utils.text import slugify
>
> class Pet(models.Model):
>     name = models.CharField(max_length=255)
>     age = models.IntegerField()
>     slug = models.SlugField(allow_unicode=True, max_length=100, 
> unique=True, default="default_pet_slug")
>
>     def __str__(self):
>         return self.name
>
>     def save(self, *args, **kwargs):
>         self.slug = slugify(self.name)
>         super().save(*args, **kwargs)
>
>     def get_absolute_url(self):
>         return reverse("pet:pet_details", kwargs={"slug": self.slug})
>
>
>
> *apps.py*
> from django.apps import AppConfig
>
> class PetConfig(AppConfig):
>     default_auto_field = "django.db.models.BigAutoField"
>     name = "pet"
>
>
>
> *admin.py*
> from django.contrib import admin
> from .models import Pet
>
> admin.site.register(Pet)
>
>
>
> *settings.py*
> """
> Django settings for pet_memorial project.
>
> Generated by 'django-admin startproject' using Django 4.1.
>
> For more information on this file, see
> https://docs.djangoproject.com/en/4.1/topics/settings/
>
> For the full list of settings and their values, see
> https://docs.djangoproject.com/en/4.1/ref/settings/
> """
>
> from pathlib import Path
>
> # Build paths inside the project like this: BASE_DIR / 'subdir'.
> BASE_DIR = Path(__file__).resolve().parent.parent
>
>
> # Quick-start development settings - unsuitable for production
> # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
>
> # SECURITY WARNING: keep the secret key used in production secret!
> SECRET_KEY = 
> "django-insecure-zfb*2fvvz=_komv(#8(ho)ckc-+a3$^!@tua2#n^c&0*st=xm6"
>
> # SECURITY WARNING: don't run with debug turned on in production!
> DEBUG = True
>
> ALLOWED_HOSTS = []
>
>
> # Application definition
>
> INSTALLED_APPS = [
>     "django.contrib.admin",
>     "django.contrib.auth",
>     "django.contrib.contenttypes",
>     "django.contrib.sessions",
>     "django.contrib.messages",
>     "django.contrib.staticfiles",
>     "pet",
> ]
>
> MIDDLEWARE = [
>     "django.middleware.security.SecurityMiddleware",
>     "django.contrib.sessions.middleware.SessionMiddleware",
>     "django.middleware.common.CommonMiddleware",
>     "django.middleware.csrf.CsrfViewMiddleware",
>     "django.contrib.auth.middleware.AuthenticationMiddleware",
>     "django.contrib.messages.middleware.MessageMiddleware",
>     "django.middleware.clickjacking.XFrameOptionsMiddleware",
> ]
>
> ROOT_URLCONF = "pet_memorial.urls"
>
> TEMPLATES = [
>     {
>         "BACKEND": "django.template.backends.django.DjangoTemplates",
>         "DIRS": [
>                     'pet_memorial/templates/',
>                     'pet/templates/',
>                 ],
>         "APP_DIRS": True,
>         "OPTIONS": {
>             "context_processors": [
>                 "django.template.context_processors.debug",
>                 "django.template.context_processors.request",
>                 "django.contrib.auth.context_processors.auth",
>                 "django.contrib.messages.context_processors.messages",
>             ],
>         },
>     },
> ]
>
> WSGI_APPLICATION = "pet_memorial.wsgi.application"
>
>
> # Database
> # https://docs.djangoproject.com/en/4.1/ref/settings/#databases
>
> DATABASES = {
>     "default": {
>         "ENGINE": "django.db.backends.sqlite3",
>         "NAME": BASE_DIR / "db.sqlite3",
>     }
> }
>
>
> # Password validation
> # 
> https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators
>
> AUTH_PASSWORD_VALIDATORS = [
>     {
>         "NAME": 
> "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
>     },
>     {"NAME": 
> "django.contrib.auth.password_validation.MinimumLengthValidator",},
>     {"NAME": 
> "django.contrib.auth.password_validation.CommonPasswordValidator",},
>     {"NAME": 
> "django.contrib.auth.password_validation.NumericPasswordValidator",},
> ]
>
>
> # Internationalization
> # https://docs.djangoproject.com/en/4.1/topics/i18n/
>
> LANGUAGE_CODE = "en-us"
>
> TIME_ZONE = "UTC"
>
> USE_I18N = True
>
> USE_TZ = True
>
>
> # Static files (CSS, JavaScript, Images)
> # https://docs.djangoproject.com/en/4.1/howto/static-files/
>
> STATIC_URL = "static/"
>
> # Default primary key field type
> # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
>
> DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
>
>
>
> *home folder / home.html*
> <!DOCTYPE html>
> <html lang="en" dir="ltr">
>   <head>
>     <meta charset="utf-8">
>     <title></title>
>   </head>
>   <body>
>     test
>     <a href="{% url 'pet_details' slug='slug' %}">Pet Profile: Mocha</a>
>   </body>
> </html>
>
>
>
> *"pet" templates folder / pet_profile.html*
> <!DOCTYPE html>
> <html lang="en" dir="ltr">
>   <head>
>     <meta charset="utf-8">
>     <title></title>
>   </head>
>   <body>
>     {{ pet_details }}
>   </body>
> </html>
>
>
>
> *the error*
> Page not found (404)
> No pet found matching the query 
> Request Method:  GET 
> Request URL:  http://127.0.0.1:8000/pet/slug 
> Raised by:  pet.views.PetDetailView 
>
> Using the URLconf defined in pet_memorial.urls, Django tried these URL 
> patterns, in this order: 
>
>    1. admin/ 
>    2. [name='home'] 
>    3. pet/ <slug:slug> [name='pet_details'] 
>
> The current path, pet/slug, matched the last one. 
>
> You’re seeing this error because you have DEBUG = True in your Django 
> settings file. Change that to False, and Django will display a standard 
> 404 page. 
>
>
>
> -------------------------------------
>
>
>
>
> I am trying to make an app for people to share information about their 
> pets (animals). I have made the framework files so far, but have run into a 
> problem getting the pet's slug (which should be unique for each pet, in 
> order to have a unique URL for each pet's profile page with no collisions 
> between pets if by chance named the same).
>
> I have no idea why the slug is not evaluating to the default default_pet_slug 
> in models.py as defined by default = "default_pet_slug". But in any case, 
> why doesn't the slug match itself? It is a variable in both the url.py file 
> (in pets app) and in the home.html a-href link. The homepage renders just 
> fine, but this error pops up when I click on the link defined in the 
> homepage's html template, home.html.
>
> A PDF printout of the error page is attached for verity.
>
> Any help is appreciated. Many thanks.
>
> Michael
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/8f141ba9-3411-48ce-9f24-08ee59542cdfn%40googlegroups.com.

Reply via email to