Невозможно получить доступ к другим приложениям в Django - PullRequest
0 голосов
/ 20 октября 2019

Я пишу приложение для начинающих Django. В настоящее время я в состоянии первое приложение, которое я создал. Однако я не могу понять, как получить доступ к двум другим приложениям.

swiss (project)
  |_ app_picker (default app)
  |_ eft
  |_ servermon

В настоящее время я могу получить доступ к app_picker, набрав 127.0.0.1: 8000 / app_picker / ,Но когда я набираю 127.0.0.1: 8000 / eft или 172.0.0.1: 8000 / servermon , страница не найдена. Что я не могу понять с помощью моей конфигурации Django?

Установленные приложения

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app_picker',
    'etf',
    'servermon',
]

URL проекта

from django.contrib import admin
from django.urls import path
from django.views.generic import RedirectView
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app_picker/', include('app_picker.urls')),
    path('etf/', include('etf.urls')),
    path('servermon/', include('servermon.urls')),
    path('', RedirectView.as_view(url='app_picker/', permanent=True)),
]

#Add Django site authentication urls (for login, logout, password management)
urlpatterns += [
    path('accounts/', include('django.contrib.auth.urls')),
]

URL-адреса app_picker

from django.conf import settings
from django.conf.urls.static import static
from django.urls import path
from . import views

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

eft URL

from django.conf import settings
from django.conf.urls.static import static
from django.urls import path
from . import views

urlpatterns = [
    path('eft/', views.base, name='eft_base'),
]

eft Просмотры

from django.shortcuts import render

# Create your views here.
def base(request):
    return render(request, 'eft_base.html')

URL-адреса servermon

from django.conf import settings
from django.conf.urls.static import static
from django.urls import path
from . import views

urlpatterns = [
    path('servermon/', views.base, name='servermon_base'),
]

Просмотры servermon

from django.shortcuts import render

# Create your views here.
def base(request):
    return render(request, 'servermon_base.html')

Ответы [ 2 ]

1 голос
/ 20 октября 2019

В etf.urls.py изменить:

path('eft/', views.base, name='eft_base'),

К:

path('', views.base, name='eft_base'),

А затем получить доступ:

127.0.0.1:8000/eft/    

Аналогично, в servermon.urls.py изменить:

path('servermon/', views.base, name='servermon_base'),

На:

path('', views.base, name='servermon_base'),

И затем получить доступ:

127.0.0.1:8000/servermon/

Без изменения этих файлов, если вы хотитечтобы получить доступ, вам нужно использовать:

127.0.0.1:8000/eft/eft/

Здесь с URL eft/eft/:

path('etf/', include('etf.urls')),

Соответствует первому eft/, а затем поиск продолжается составшаяся часть eft/ in etf.urls.py:

path('eft/', views.base, name='eft_base'),

Соответствует оставшейся части eft/, а views.base используется для обработки запроса.


Аналогично длядругое использование:

172.0.0.1:8000/servermon/servermon/

Возможно, вы захотите прочитать: Функции диспетчера URL и django.urls для использования в URLconfs .

0 голосов
/ 20 октября 2019

Это потому, что ваше определение пути не совпадает с ожидаемым результатом.

eft Urls должно быть так:

urlpatterns = [
    path('', views.base, name='eft_base'),
]

и servermonUrls :

urlpatterns = [
    path('', views.base, name='servermon_base'),
]

Это потому, что когда вы обращаетесь к 172.0.0.1:8000/servermon/, django перейдет к ROOT_URLS ( URL проекта ) для сопоставления пути. Найден /servermon/, затем он извлечет эту часть в URL, а затем перейдет к include('servermon.urls'). После извлечения совпавшей части теперь она имеет только '', поэтому ваш путь к servermon должен быть таким же, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...