Попытка достичь url с помощью Path include() показывает 404 в Django

#python #django

#python #django

Вопрос:

прежде всего, я хочу извиниться, если я использую неправильные термины или слова в своем вопросе. Я совершенно новичок в Django и получил всего несколько месяцев опыта работы с python. Я надеюсь, что вы все равно сможете понять мой вопрос. Я также хочу признать тот факт, что я использую некоторые импортные файлы, которые здесь не нужны и могут не иметь отношения к последней версии Django, я начинаю теряться во всех вещах, которые я пробовал из других потоков для решения моей проблемы.

У меня возникли некоторые проблемы с отображением страницы из URL приложений. Я перенаправляюсь на свою домашнюю страницу при попытке достичь localhost: 8000 /articles (потому что / articles выдает ошибку 404) Я не уверен точно, какой код мне нужно включить сюда, так что потерпите.

articles/urls.py и articles/views.py

 from django.conf.urls import url
from django.urls import include, path
from django.conf.urls import include, url
from django.urls import path
from .import views


urlpatterns = [
    path('^$', views.article_list),

    ]



from django.shortcuts import render
    from django.http import HttpResponse
    
    # views
    def article_list(request):
        return render(request, "articles/article_list.html")
  

Проект urls.py и проект views.py

 from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from django.urls import include, path
from django.conf.urls import include, url
from django.urls import path, re_path
from .import views



urlpatterns = [
    path('admin/', admin.site.urls),
    path('articles/', include('articles.urls')),
    path('about/', views.about),
    re_path('^.*$', views.homepage)
]



from django.http import HttpResponse
from django.shortcuts import render
#Views
def homepage(request):
    # return HttpResponse('homepage')
    return render(request, "homepage.html")

def about(request):
    # return HttpResponse('about')
    return render(request, "about.html")
  

Я не получаю ошибок или чего-то подобного.
Итак, мой вопрос — кто-нибудь знает, почему / статьи генерируют ошибку 404?

Заранее благодарю вас.

Ответ №1:

Во-первых, не используйте ^$ with path() . Вы используете только регулярные выражения с. re_path

 path('', views.article_list),
  

Обычно /articles перенаправляется на /articles/ с завершающей косой чертой.

Однако в вашем случае у вас есть универсальный шаблон:

 re_path('^.*$', views.homepage)
  

Это соответствует /articles , поэтому вы видите домашнюю страницу. Обратите внимание, что он не перенаправляется, как вы говорите в своем ответе, панель браузера все равно будет отображаться /articles .

Если у вас нет действительно веской причины иметь catch all, я предлагаю вам удалить его и изменить на

 re_path('^$', views.homepage),
  

или

 path('', views.homepage),
  

Таким образом, вы увидите домашнюю localhost:8000 страницу, localhost:8000/articles на которую будет перенаправлено localhost:8000/articles/ , и вы получите 404 для страниц, которые не существуют, например localhost:8000/art/

Комментарии:

1. Большое вам спасибо, он обновлен. Итак, теперь я действительно вижу ошибку 404 вместо того, чтобы видеть только домашнюю страницу, это хорошо. Остается вопрос, почему я получаю 404 в / articles?

2. Вы смешиваете синтаксис re_path and path . Это должно быть path('', views.article_list), или re_path(r'^$', views.article_list),

Ответ №2:

Просто используя пустую строку '' вместо '^$ :

 urlpatterns = [
  path('', views.article_list),
]
  

Взгляните на последний пример здесь:https://docs.djangoproject.com/en/3.1/topics/http/urls/#url-namespaces-and-included-urlconfs

*Я не знаю, какую версию django вы используете, но для путей регулярных выражений вы должны использовать re_path() https://docs.djangoproject.com/en/3.1/ref/urls/#django.urls.re_path