Nano Hash - криптовалюты, майнинг, программирование

Приложение Django не загружается и выдает ошибку IsADirectoryError

Я новичок в джанго и питоне. Я использовал тему django для создания сайта. Djanog, NGINX, Gunicorn работают нормально. Проблема в том, что когда я пытаюсь загрузить страницу с помощью URL-адреса приложения, это дает мне IsADirectoryError. Ниже вся информация.

Базовый каталог

drwxr-xr-x 6 rwb  root 4096 Jul 30 15:43 netdash_venv/
drwxr-xr-x 3 rwb  root 4096 Aug  5 16:12 projects/core

netdash_venv — это виртуальная папка Python, а все файлы проектов находятся в папке core в папке projects.

:/opt/netdash/projects$ ll core
total 76
drwxrwxr-x 7 rwb rwb       4096 Aug 11 11:28 ./
drwxr-xr-x 3 rwb root      4096 Aug  5 16:12 ../
drwxrwxr-x 4 rwb rwb       4096 Aug 10 16:30 app/
drwxrwxr-x 4 rwb rwb       4096 Aug  5 16:31 authentication/
drwxrwxr-x 5 rwb rwb       4096 Aug  5 16:17 core/
srwxrwxrwx 1 rwb www-data     0 Aug 11 11:28 core.sock=
-rw-r--r-- 1 rwb rwb      40960 Aug  5 16:39 db.sqlite3
-rwxr-xr-x 1 rwb rwb        624 Aug  5 15:36 manage.py*
drwxrwxr-x 4 rwb rwb       4096 Aug 10 16:00 sei/
drwxrwxr-x 4 rwb rwb       4096 Aug  5 15:48 staticfiles/

Приложение app и authentication обрабатывает части аутентификации/входа/выхода из системы. У меня проблемы с запуском приложения sei с URL-адреса боковой панели.

Файл sidebar.html находится в папке projects/core/core/templates/.

        <li class="nav-item">
          <a class="sidebar-link" href="/sei">
            <span class="icon-holder">
              <i class="c-red-500 ti-video-camera"></i>
            </span>
            <span class="title">SEI</span>
          </a>
        </li>       

Когда я нажимаю ссылку href выше, я получаю следующую ошибку.

IsADirectoryError at /sei/
[Errno 21] Is a directory: '/opt/netdash/projects/core/core/templates'
Request Method: GET
Request URL:    http://******.net/sei/
Django Version: 2.2
Exception Type: IsADirectoryError
Exception Value:    
[Errno 21] Is a directory: '/opt/netdash/projects/core/core/templates'
Exception Location: /opt/netdash/netdash_venv/lib/python3.5/site-packages/django/template/loaders/filesystem.py in get_contents, line 23
Python Executable:  /opt/netdash/netdash_venv/bin/python3
Python Version: 3.5.2
Python Path:    
['/opt/netdash/projects/core',
 '/opt/netdash/netdash_venv/bin',
 '/usr/lib/python35.zip',
 '/usr/lib/python3.5',
 '/usr/lib/python3.5/plat-x86_64-linux-gnu',
 '/usr/lib/python3.5/lib-dynload',
 '/opt/netdash/netdash_venv/lib/python3.5/site-packages']

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
    'sei'
]
ROOT_URLCONF = 'core.urls'
LOGIN_REDIRECT_URL = "home"   # Route defined in app/urls.py
LOGOUT_REDIRECT_URL = "home"  # Route defined in app/urls.py
TEMPLATE_DIR = os.path.join(BASE_DIR, "core/templates")  # ROOT dir for templates

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [TEMPLATE_DIR],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

ядро — urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),          # Django admin route 
    path("", include("authentication.urls")), # Auth routes - login / register
    path("", include("app.urls")),            # UI Kits Html files
    path("sei/", include("sei.urls")),
]

приложение – urls.py

from django.urls import path, re_path
from app import views

urlpatterns = [

    # The home page
    path('', views.index, name='home'),

    # Matches any html file
    re_path(r'^.*\.*', views.pages, name='pages'),
]

приложение – views.py

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect
from django.template import loader
from django.http import HttpResponse
from django import template

# Create your views here.
@login_required(login_url="/login/")
def index(request):
    return render(request, "index.html")

@login_required(login_url="/login/")
def pages(request):
    context = {}
    # All resource paths end in .html.
    # Pick out the html file name from the url. And load that template.
    load_template = request.path.split('/')[-1]
    html_template = loader.get_template( load_template )
    return HttpResponse(html_template.render(context, request))

sei – urls.py

from django.urls import path
from . import views

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

sei — views.py

from django.shortcuts import render
from .models import camera

# Create your views here.
def index(request):

    cameras = camera.objects.all()

    return render(request, "sei.html", {'cameras': cameras})

Я пробовал несколько вещей. Я могу войти и выйти из системы, но всякий раз, когда я пытался зайти в /sei, я выдавал ошибку. Пожалуйста помоги.


  • Правильно ли, что ваш путь к шаблону включает ядро/ядро? 11.08.2020
  • Да, это правильно. 12.08.2020
  • Вы пытались переупорядочить свой основной urls.py? Поместите строку для Sei на второе или первое место в списке urlpatterns. 12.08.2020

Ответы:


1

Django проверяет URL-адрес по списку шаблонов URL-адресов в той последовательности, в которой они были введены.

Текущее ядро — urls.py выглядит так:

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

urlpatterns = [
    path('admin/', admin.site.urls),          # Django admin route 
    path("", include("authentication.urls")), # Auth routes - login / register
    path("", include("app.urls")),            # UI Kits Html files
    path("sei/", include("sei.urls")),
]

Это означает, что app.urls будет проверен перед sei.urls.

Я не эксперт по регулярным выражениям, но мне кажется, что sei/ соответствует вашему URL-адресу для представления страниц в приложении. Затем он пытается загрузить sei в качестве шаблона, но не может, потому что это каталог... IsADirectoryError в /sei/.

Вы можете улучшить регулярное выражение, заменив его на r'^/[^/]*.html', чтобы оно соответствовало только URL-адресам, указывающим на корневую папку и заканчивающимся на .html.

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

Новое ядро ​​— urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),          # Django admin route 
    path("sei/", include("sei.urls")),
    path("", include("authentication.urls")), # Auth routes - login / register
    path("", include("app.urls")),            # UI Kits Html files
]

Таким образом, sei/ будет соответствовать первому и загрузит правильное представление.

12.08.2020
  • Да вы правы. Когда я сначала помещаю path(sei/, include(sei.urls)), страница загружается, но происходят две вещи. Страница теряет значки темы, которые я использую, и я могу попасть на страницу sei даже без аутентификации, поскольку app.urls больше не проверяет @login_required. Любое другое предложение? 13.08.2020
  • Я также добавил @login_required в sei views.py. Теперь он также проверяет аутентификацию. Единственная боль в том, что я должен добавлять ко всем новым приложениям. Но ничего страшного. Единственное, что не работает, это страница SEI, которая теряет путь к значку темы. Однако ваш повторный заказ решил мою проблему. 13.08.2020
  • Вы имеете в виду, что он не загружает таблицу стилей? Если это так, это зависит от того, как вы его настроили. Вероятно, вам нужно добавить ../ к пути, так как вы сейчас находитесь в директории sei/, на один уровень выше. Django поддерживает обслуживание статических файлов, но это совершенно новый вопрос. Если вы довольны тем, что мой ответ решает исходный вопрос, отметьте его как принятый ответ. 13.08.2020
  • Нет, это не таблица стилей. Это работает. Страница sei сейчас загружается. Это то, с чем у меня была проблема с самого начала. Спасибо за вашу помощь. Я отмечу это как принятый ответ. 13.08.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..