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 [email protected]
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/8f141ba9-3411-48ce-9f24-08ee59542cdfn%40googlegroups.com.