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'.

Пожалуйста, проверьте эти вещи еще раз. Как я уже сказал, проблема вызвана использованием статики и шаблонов. а не урлов.

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