Не удается заставить опросы отображаться в url

Я следую учебникам по django и пока что, выполняя задание 3, я не могу заставить опросы отображаться на url.

Если я правильно и внимательно следовал инструкциям, то это должно выглядеть следующим образом:

models.py:

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

views.py

from django.http import HttpResponse
from .models import Question

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([q.question_text for q in latest_question_list])
    return HttpResponse(output)

def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)

def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

urls.py:

from django.contrib import admin
from django.urls import include, path
from . import views
urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
    # ex: /polls/
    path('', views.index, name='index'),
    # ex: /polls/5/
    path('<int:question_id>/', views.detail, name='detail'),
    # ex: /polls/5/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

index.html

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

settings.py

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Однако, когда я запускаю сервер, он не может найти опросы

enter image description here

Взглянув на изображение, можно увидеть сообщение:

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:
    1. admin/

Ваш проект в настоящее время указывает на урлы в папке mysite, которая является приложением, содержащим settings.py. Вы можете убедиться в этом, проверив ROOT_URLCONF в настройках.

Исходя из шаблонов url в вашем polls.urls, лучшим вариантом будет переместить include('polls.urls') в mysite.urls:

polls/urls.py

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

mysite/urls.py

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

Мы делаем это потому что:

Когда Django встречает include(), он отрезает любую часть URL, соответствующую этому моменту, и отправляет оставшуюся строку в URLconf для дальнейшей обработки.

Помните: Вы не должны объявлять корневой путь в том же urls.py, который импортируется по корневому пути, как вы объявили path('polls/', include('polls.urls')) в вашем polls.urls. По сути, вы импортируете polls.urls в polls.urls таким образом.

Вы пропустили шаг "Напишите свой первый вид" из учебника

https://docs.djangoproject.com/en/4.0/intro/tutorial01/#write-your-first-view

Следующий шаг - указать корневой URLconf на модуль polls.urls. В mysite/urls.py добавьте импорт для django.urls.include и вставьте include() в список urlpatterns, чтобы получилось:

mysite/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]
Вернуться на верх