#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
andpath
. Это должно быть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