Не могу найти шаблон - Django - PullRequest
0 голосов
/ 30 марта 2020

В моем проекте Django у меня есть два приложения , которые называются data_app и user_app. data_app работает отлично, но user_app нет.

Когда я пишу в своем браузере http://127.0.0.1:8000/login/ появляется следующая ошибка,

django .template.exceptions. TemplateDoesNotExist: /login.html

Возможно, я что-то забыл, но не знаю что. Затем я показываю различные части и свою структуру:

views.py

from django.shortcuts import render

# Create your views here.
from django.shortcuts import redirect
from django.contrib.auth.models import User, auth
from django.contrib import messages

def login(request):
    if request.method == 'POST':
        username = request.POST['uname']
        password = request.POST['pass']
        user = auth.authenticate(username=username, password=password)

        if user is not None:
            auth.login(request,user)
            return redirect('/data_app/data-bbdd/')
        else:
            return redirect('login')

    else:
        print('Hello2')
        return render(request, '/login.html')

def logout(request):
    auth.logout(request)
    return redirect('login')

urls.py (user_app)

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

from . import views

urlpatterns = [
    path('login/', views.login, name='login'),
    path('logout/', views.logout, name='logout')
]

urls.py («общее» приложение)

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

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('', include('applications.data_app.urls')),
    re_path('', include('applications.user_app.urls'))
]

Структура

enter image description here

Полагаю, я забыл какой-то путь, но я не вижу, где он был.

Примечание print('Hello2') из views.py работает, проблема в return render(request, '/login.html').

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Поскольку шётов уже ответил, ошибка в render(request, '/login.html'), так как ваш шаблон находится в папке user_app.

При создании приложения Django вы должны стараться держать ваши шаблоны разделенными.

Вы должны связать ваши шаблоны data_app внутри вашего data_app. Внутри следующей папки: applications/data_app/templates/data_app/data.html

Для вашего user_app это будет следующее: applications/user_app/templates/user_app/login.html

Чтобы это работало, вам необходимо обновить файл settings.py: (см. https://docs.djangoproject.com/en/3.0/topics/templates/)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
        },
    },
]

Тем не менее, внутри вашего views.py вам все равно придется звонить: render(request, 'user_app/login.html'), но вы можете держать свои шаблоны близко к месту, к которому они принадлежат.

Вы должны использовать applications/templates для общих общих шаблонов. Обычно в этой папке будет base.html, откуда могут распространяться другие шаблоны.

1 голос
/ 30 марта 2020

return render(request, '/login.html') заменить на return render(request, 'user_app/login.html')

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