Страница не найдена (404) Не найдено ни одного поста, соответствующего запросу Метод запроса: GET URL запроса: http://127.0.0.1:8000/news/ [дубликат]

Как новичок в Django, я в настоящее время делаю целый веб-сайт в качестве проекта с Django. На моем сайте есть навигационная панель, как показано ниже:

navbar

Я создал модели, представления и шаблоны для всех вкладок. Моя вкладка News должна показывать объекты новостей, которые я указал в качестве ввода в панели администратора, и когда я нажимаю на новость, подробности будут показаны в шаблоне, который я написал. Вкладка Resources - это подменю, в котором есть Reports; если вы нажмете на Reports, вы увидите список pdf файлов, и при нажатии на файл будет показан, как и в закладке News.

Моя проблема заключается в том, что я прописал пути к url в файле urls.py проекта и в файле urls.py приложения, но я получаю следующую ошибку. Я не могу понять, в чем дело.

404

Мой файл моделей выглядит следующим образом; я добавляю модели главной страницы, страницы новостей и страницы отчета:

models.py

from django.contrib.auth.models import User
from django.db import models
from django.urls import reverse
from django.utils import timezone

from ckeditor.fields import RichTextField
from ckeditor_uploader.fields import RichTextUploadingField


class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
    )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    body = RichTextField()
    publish = models.DateTimeField(default=timezone.now)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    class Meta:
        ordering = ('-publish',)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('blog:details', args=[self.slug])

class Report(models.Model):
    rp_title = models.CharField(max_length=500)
    slug = models.SlugField(max_length=300, unique_for_date='date')
    url = models.URLField(max_length=500)
    date = models.DateTimeField(default=timezone.now)


    def __str__(self):
        return self.rp_title

    class Meta:
        ordering = ('rp_title',)

    def get_absolute_url(self):
        return reverse('report:report_detail', args=[self.slug])

class News(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
    )
    news_title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=300, unique_for_date='nw_publish')
    news_author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='news_posts')
    news_body = RichTextField()
    image_header = models.ImageField(null=True, blank=True)
    nw_publish = models.DateTimeField(default=timezone.now)
    nw_status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    class Meta:
        ordering = ('nw_publish',)

    def __str__(self):
        return self.news_title

    def get_absolute_url(self):
        return reverse('news:news_detail', args=[self.slug])

Мой файл views.py выглядит следующим образом:

from django.views import generic
from django.views.generic import ListView, DetailView
from django.http import Http404
from .models import Post, Report, News, Member, Project


class Home(ListView):
    model = Post
    context_object_name = 'home'
    template_name = 'blog/home.html'


class HomeDetail(generic.DetailView):
    model = Post
    context_object_name = 'details'
    template_name = 'blog/details.html'


class ReportListView(ListView):
    model = Report
    context_object_name = 'reports'
    template_name = 'blog/report_list.html'

class ReportDetailView(DetailView):
    model = Report
    context_object_name = 'report'
    template_name = 'blog/report_detail.html'


class NewsListView(ListView):
    model = News
    context_object_name = 'newss'
    template_name = 'blog/news.html'


class NewsDetailView(DetailView):
    model = News
    context_object_name = 'news'
    template_name = 'blog/news_detail.html'

Мой файл project/urls.py выглядит следующим образом:

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
                  path('admin', admin.site.urls),
                  path('', include('blog.urls', namespace='blog')),
                  path('ckeditor/', include('ckeditor_uploader.urls')),
                  path('reports/', include('blog.urls', namespace='report')),
                  path('news/', include('blog.urls', namespace='news')),
                  path('projects/', include('blog.urls', namespace='projects')),

              ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

И наконец, вот мой файл app/urls.py:

from django.urls import path, re_path

from . import views
from .views import Home, HomeDetail, Contact, ReportListView, ReportDetailView, NewsListView, NewsDetailView

app_name = 'blog'
urlpatterns = [
    # post views
    path('', Home.as_view(), name='home'),
    path('<slug:slug>/', HomeDetail.as_view(), name='details'),
    path('reports/', ReportListView.as_view(), name='report_list'),
    path('<slug:slug>/', views.ReportDetailView.as_view(), name='report_detail'),
    path('news/', NewsListView.as_view(), name='news_list'),
    path('<slug:slug>/', NewsDetailView.as_view(), name='news_detail'),
]

Похоже, я не понимаю, как задать урлы для различных шаблонов в Django, но в моем файле app/urls.py, если я убираю первый закрывающий слэш в 'slug:slug', появляется список новостей, а не список отчетов, и наоборот. Также, когда я нажимаю на новость из списка, подробная информация не появляется и выдает ошибку 404, как и на фотографии. Моя версия Django - 3.2.7, а версия python - 3.6.8. Я знаю, что это глупая проблема с моей стороны, но я застрял на 2 дня и не понимаю, что я делаю неправильно. Любая подсказка будет высоко оценена. Спасибо за ваше время, люди.

Вернуться на верх