Django: не удается разрешить шаблон URL-адресов: отображается содержимое страницы Всегда индексировать - PullRequest
1 голос
/ 17 июня 2020

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

appTwo urls.py Файл:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^$', views.users, name='users'),
    url(r'^$', views.help, name='help'),
]

MyProject urls. py файл:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url('admin/', admin.site.urls),
    url(r'^users/', include('appTwo.urls')),
    url(r'^help/', include('appTwo.urls')),
]

Если я вызываю / users или / help, браузер отображает данные только для индексного файла.

Что-то я делаю неправильно с регулярным выражением?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы неправильно настроили свой urlpatterns. Прежде всего, в файле проекта urls.py вы говорите, что если запрос отправлен на /users или /help, то Django должен заглянуть в ваш appTwo.urls. Когда Django попадает туда, он обнаруживает, что urlpatters установлены так, что все, что пусто после любого из вышеупомянутых URL-адресов, должно обрабатываться views.index, views.users и views.help. Но поскольку views.index является первым в списке, тогда весь запрос в конечном итоге обрабатывается этим представлением.

Кстати, если вы используете Django> = 2.0, вам больше не нужно чтобы использовать функцию url(), но вместо нее path(), для которой вы можете объявить пути как простые строки, а не регулярные выражения.

У вас должно получиться что-то вроде:

MyProject / urls.py

from django.urls import path


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

MyApp / urls.py

from django.urls import path

urlpatterns = [
    path('', views.index, name='index'),
    path('users/', views.users, name='users'),
    path('help/', views.help, name='help'),
]

0 голосов
/ 17 июня 2020

, когда django достигает здесь (в URL-адресе вашего приложения) при разрешении URL-адресов, вы увидите, что все три URL-адреса имеют пустое регулярное выражение в качестве первого параметра (поэтому будет выбран первый из них), и когда вы видите его индекс, вы всегда показываете индексная страница. Вам нужно различать URL-адреса. Что-то вроде этого.

urlpatterns = [
                      url(r'^users/$', views.users, name='users'),
                      url(r'^help/$', views.help, name='help'),
                      url(r'^$', views.index, name='index'),
                   ]

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

...