Django: URL-адреса приложений показывают 404 ошибки
Я добавил три приложения на свой сайт django: приложение, блог и обратная связь. У всех трех одна и та же проблема: когда я нажимаю на ссылку или ввожу URL-адрес любого из них, я получаю ошибку 404.
Ниже я прикрепляю код и другую документацию для одного из проблемных аддонов. Для дальнейшего контекста, если необходимо, мой полный код можно найти на https://github.com/kkerwin1/pensdnd.
Структура каталога
(venv) kris@adjutant:~/venv/pensdnd$ tree -if
.
./application
./application/admin.py
./application/apps.py
./application/forms.py
./application/__init__.py
./application/migrations
./application/models.py
./application/templates
./application/templates/application.html
./application/templates/application_thanks.html
./application/tests.py
./application/urls.py
./application/views.py
./blog
./blog/admin.py
./blog/apps.py
./blog/models.py
./blog/templates
./blog/templates/blog_list.html
./blog/templates/blog_post.html
./blog/tests.py
./blog/urls.py
./blog/views.py
./feedback
./feedback/admin.py
./feedback/apps.py
./feedback/forms.py
./feedback/models.py
./feedback/templates
./feedback/templates/feedback.html
./feedback/templates/feedback_thanks.html
./feedback/tests.py
./feedback/urls.py
./feedback/views.py
./manage.py
./pensdnd
./pensdnd/settings.py
./pensdnd/static
./pensdnd/static/css
./pensdnd/static/css/main.css
./pensdnd/static/html
./pensdnd/static/html/arvon_rules.html
./pensdnd/static/html/be_a_dm.html
./pensdnd/static/html/community_rules.html
./pensdnd/static/html/guild_rules.html
./pensdnd/static/html/index.html
./pensdnd/static/html/volunteer.html
./pensdnd/static/img
./pensdnd/static/img/carbon_fibre.png
./pensdnd/static/img/github_icon.png
./pensdnd/static/js
./pensdnd/static/misc
./pensdnd/static/templates
./pensdnd/static/templates/base.html
./pensdnd/static/templates/partials
./pensdnd/static/templates/partials/blogbar.html
./pensdnd/static/templates/partials/feedback.html
./pensdnd/static/templates/partials/footer.html
./pensdnd/static/templates/partials/navbar.html
./pensdnd/static/templates/partials/newsbar.html
./pensdnd/static/vid
./pensdnd/urls.py
./pensdnd/views.py
./pensdnd/wsgi.py
./requirements.txt
./pensdnd/urls.py
from django.contrib import admin
from django.urls import path, include
from . import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('', views.HomePageView.as_view()),
path('admin/', admin.site.urls),
path('be_a_dm', views.BeADM.as_view()),
path('blog', include('blog.urls')),
path('feedback', include('feedback.urls')),
path('application', include('application.urls')),
path('guild_rules', views.GuildRules.as_view()),
path('community_rules', views.CommunityRules.as_view()),
path('arvon_rules', views.ArvonRules.as_view()),
path('volunteer', views.Volunteer.as_view()),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
./blog/urls.py
from . import views
from django.urls import path
urlpatterns = [
path('blog', views.PostList.as_view()),
path('blog/<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
]
./blog/views.py
from django.shortcuts import render
from .models import Post
from django.views import generic
# Create your views here.
class PostList(generic.ListView):
queryset = Post.objects.filter(status=1).order_by('-created_on')
template_name = 'templates/blog_list.html'
class PostDetail(generic.DetailView):
model = Post
template_name = 'templates/blog_post.html'
./blog/models.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
STATUS = (
(0,"Draft"),
(1,"Publish")
)
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=200, unique=True)
author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
updated_on = models.DateTimeField(auto_now= True)
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
status = models.IntegerField(choices=STATUS, default=0)
class Meta:
ordering = ['-created_on']
def __str__(self):
return self.title
./blogs/templates/blog_list.html
{% extends 'static/templates/base.html' %}
<!doctype html>
<html lang="en">
<head>
<title>
{% block title %}
PensiveDND :: Blog Posts
{% endblock %}
</title>
</head>
<body>
{% block pagecontent %}
<section>
{% for post in post_list %}
<article>
<h3>{{ post.title }}</h3>
<p>{{ post.author }} | {{ post.created_on }}</p>
<p>{{ post.content|slice:":200" }}
<a href="{% url 'post_detail' post.slug %}" class="btn btn-primary">Read More</a>
</article>
</section>
{% endblock %}
</body>
</html>
./blogs/templates/blog_post.html
{% extends 'static/templates/base.html' %}
<!doctype html>
<html lang="en">
<head>
<title>
{% block title %}
PensiveDND :: Blog :: {{ post.title }}
{% endblock %}
</title>
</head>
<body>
{% block pagecontent %}
<section>
<h2>{{ post.title }}</h2>
<p>{{ post.author }} | {{ post.created_on }}</p>
<p>{{ post.content | safe }}</p>
</section>
{% endblock %}
</body>
</html>
В файле "pensdnd/urls.py" не хватает косой черты после названия приложения
например
path('feedback', include('feedback.urls')),
должно быть
path('feedback/', include('feedback.urls')),
Невозможно получить доступ к html-файлам. В вашем файле urls.py нет ошибок. По крайней мере, для приложения блога. Когда я запускаю код, я не получаю ошибку 404 с разными правками. Согласно кодам Github, я изменил секцию DIRS в поле templates в settings.py на 'templates' и перенес сюда html-файлы, которые вы использовали в приложении для блога. Никаких проблем не возникло. Редактирование всего кода может быть сложным, но проблема именно в этом. (Обратите внимание, что я контролирую только приложение блога).
Также, вы получите ошибку, потому что вы не используете {% endfor %}.
{% for post in post_list %}
<article>
<h3>{{ post.title }}</h3>
<p>{{ post.author }} | {{ post.created_on }}</p>
<p>{{ post.content|slice:":200" }}
<a href="{% url 'post_detail' post.slug %}" class="btn btn-primary">Read More</a>
</article>
Если вы установили расположение шаблонов, вам следует просто использовать template_name = 'blog_list.html вместо template_name = 'templates/blog_list.html'.
Пожалуйста, проверьте эти вещи еще раз. Как я уже сказал, проблема вызвана использованием статики и шаблонов. а не урлов.