Страница не найдена (404) Не найдено ни одного поста, соответствующего запросу Метод запроса: GET URL запроса: http://127.0.0.1:8000/news/ [дубликат]
Как новичок в Django, я в настоящее время делаю целый веб-сайт в качестве проекта с Django. На моем сайте есть навигационная панель, как показано ниже:
Я создал модели, представления и шаблоны для всех вкладок. Моя вкладка News должна показывать объекты новостей, которые я указал в качестве ввода в панели администратора, и когда я нажимаю на новость, подробности будут показаны в шаблоне, который я написал. Вкладка Resources - это подменю, в котором есть Reports; если вы нажмете на Reports, вы увидите список pdf файлов, и при нажатии на файл будет показан, как и в закладке News.
Моя проблема заключается в том, что я прописал пути к url в файле urls.py проекта и в файле urls.py приложения, но я получаю следующую ошибку. Я не могу понять, в чем дело.
Мой файл моделей выглядит следующим образом; я добавляю модели главной страницы, страницы новостей и страницы отчета:
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 дня и не понимаю, что я делаю неправильно. Любая подсказка будет высоко оценена. Спасибо за ваше время, люди.