Использование slug в Django приводит к ошибке отсутствия обратного пути
Мои извинения, если вы уже читали предыдущее сообщение, которое я сделал о моей проблеме со slug в Django. Я очистил свой старый код и, возможно, стал лучше понимать, что я делаю, но я все еще теряюсь, как заставить URL, сгенерированный из slug, работать на моей главной целевой странице.
Я работаю над портфолио. У меня есть целевая страница, на которой я собираюсь разместить ссылки на отдельные детальные страницы. Для этого я использую get_absolute_url в своих моделях. При тестировании я могу заставить ссылку работать на странице с деталями отдельных проектов, но не на основных целевых страницах. Что забавно, потому что мне не нужно, чтобы эти ссылки работали на страницах отдельных проектов. Я предполагаю, что что-то в моих представлениях настроено неправильно.
Мой views.py настроен следующим образом:
from django.shortcuts import render, get_object_or_404, get_list_or_404
from .models import Project
def home(request):
projects = Project.objects.all()
return render(request, 'portfolio/home.html', {'projects': projects})
def individual_project_view(request, project_id):
projectpage = get_list_or_404(Project, slug=project_id)
return render(request, 'portfolio/project_detail.html',{'projectpage':projectpage})
def project_home(request):
portfolioprojects = get_list_or_404(Project)
return render(request, 'portfolio/project_detail.html', {'portfolioprojects':portfolioprojects})
А вот мой urls.py для отдельных целевых страниц, которые находятся в отдельном приложении.
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from portfolio import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('portfolio/', include('portfolio.urls'), name='portfolio'),
]
В корневой папке urls.py настроен следующим образом:
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from portfolio import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('portfolio/', include('portfolio.urls'), name='portfolio'),
]
Мой models.py настроен следующим образом:
from django.db import models
from django.urls import reverse
# Create your models here.
class Project(models.Model):
category = models.CharField(max_length=75, blank=True)
project_name = models.CharField(max_length=100)
company = models.CharField(max_length=250)
image = models.ImageField(upload_to='portfolio/images/')
client = models.CharField(max_length = 30, blank=True)
type = models.CharField(max_length = 80, blank=True)
slug = models.SlugField(max_length=50, blank=True)
description = models.TextField( blank=True)
testimonial = models.TextField(blank=True)
featuredimage = models.ImageField(upload_to='portfolio/images/', blank=True)
type2 = models.CharField(max_length = 80, blank=True)
description2 = models.TextField(blank=True)
featuredimage2 = models.ImageField(upload_to='portfolio/images/', blank=True)
url = models.URLField(blank=True)
url2 = models.URLField(blank=True)
testimonial2 = models.TextField(blank=True)
projecturl = models.URLField(blank=True)
projecturl2 = models.URLField(blank=True)
def get_absolute_url(self):
# u create url only here and then reference here throughout of your project
return reverse('portfolio:individual_project',args=[self.slug])
def __str__ (self):
return self.project_name
А HTML для главной целевой страницы, где я пытаюсь получить доступ к этой ссылке, выглядит следующим образом:
{% for project in projects %}
<div class="col-lg-4 col-md-6 padding_top">
{% if project.url %}
<a href="{{ project.url }}">
<img src="{{ project.image.url }}" class="img-fluid mb-2">
</a>
{% else %}
<a href="{% url 'individual_project' project.slug %}">
<img src="{{ project.image.url }}" class="img-fluid mb-2">
</a>
Когда я пытаюсь получить доступ к этому шаблону, я получаю следующую ошибку:
" NoReverseMatch в /. Обратное соответствие для 'individual_project' не найдено. 'individual_project' не является действительным именем функции представления или шаблона. "
Еще раз спасибо, и я надеюсь, что объяснил все правильно - дайте мне знать, если у вас возникнут вопросы.