Cuando ejecuto el servidor obtengo La plantilla no existe en / para mi página index.html. El mismo problema ocurre para otras plantillas también. He intentado las soluciones para preguntas similares anteriores, como verificar el directorio de plantillas y las aplicaciones instaladas en el archivo settings.py, pero nada parece funcionar. Además, cuando creo una nueva carpeta de proyecto en otra ubicación y copio todo el código allí, generalmente funciona. Este es mi árbol de carpetas:

enter image description here

Actualmente estoy aprendiendo Django y nuevo en el desbordamiento de pila. ¿Cualquier ayuda sería apreciada?

Aquí está mi código urls.py para la carpeta del proyecto:

from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
from basic_app import views
urlpatterns = [
    url(r'^$',views.index,name='index'),
    path('admin/', admin.site.urls),
    url(r'basic_app/',include('basic_app.urls')),
]

Aquí está mi archivo urls.py en basic_app:

from django.conf.urls import url
from basic_app import views

app_name= 'basic_app'
urlpatterns=[
    url(r'^register/$',views.register,name='register')
]

Aquí está mi código de archivo views.py:

from django.shortcuts import render
from basic_app.forms  import UserForm, UserProfileInfoForm

def index(request):
    return render(request,'basic_app/index.html')

def register(request):
    registered= False

    if request.method=='POST':
        user_form= UserForm(data= request.POST)
        profile_form= UserProfileInfoForm(data= request.POST)

        if user_form.is_valid() and profile_form.is_valid():
             user= user_form.save()
            user.set_password(user.password)
            user.save()

            profile= profile_form.save(commit=False)
            profile.user=user

            if 'profile_pic' in request.FILES:
                profile.profile_pic= request.FILES['profile_pics']
            profile.save()

            registered= True
        else:
            print(user_form.errors ,profile_form.errors)

    else:
        user_form= UserForm()
        profile_form= UserProfileInfoForm()


    return render(request,'basic_app/registration.html',{'user_form':user_form,'profile_form':profile_form,
                                                    'registered':registered})

Aquí está mi código de archivo settings.py para plantillas:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIR=os.path.join(BASE_DIR,'templates')
STATIC_DIR=os.path.join(BASE_DIR,'static')
MEDIA_DIR=os.path.join(BASE_DIR,'media')

Esta es mi lista de aplicaciones instaladas:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'basic_app',
]

También esto:

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',
        ],
    },
},
]
1
Mayank Modi 27 oct. 2019 a las 08:45

4 respuestas

La mejor respuesta

En su settings.py, compruebe el directorio señalado por TEMPLATE_DIR para que pueda configurar exactamente dónde está ponderando.

print(TEMPLATE_DIR) 

Luego, en views.py :

def index(request):
    return render(request,'folder/my_html_file.html')

Entonces django renderiza la plantilla desde.

TEMPLATE_DIR + "folder / my_html_file.html"

0
sbhusal123 27 oct. 2019 a las 08:43

Creo que en admin solo haz esto

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': ['templates'],
    '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',
        ],
    },
},
]

Y tu punto de vista debería ser algo como esto

return render(request,'basic_app/registration.html',{'user_form':user_form,'profile_form':profile_form,
                                                    'registered':registered})

Espero que esto ayude

0
Mahmoud Ahmed 27 oct. 2019 a las 07:58

Si está utilizando la configuración predeterminada, se supone que las plantillas están en learning_users/basic_app/templates/basic_app/ y se accede a ellas de la siguiente manera:

return render(request, `basic_app/index.html`, {})

Donde index.html es el nombre de tu plantilla. La estructura del directorio aquí puede parecer un poco redundante al principio, pero también puede cambiarla usando el archivo de configuración settings.py. En su directorio, la carpeta de plantillas se coloca directamente dentro de la carpeta del proyecto (es decir, learning_users). A menos que haya modificado los archivos de configuración para cambiar la ruta de las plantillas, esto generará un error.

0
Hanif Ali 27 oct. 2019 a las 06:29

Pero quizás pueda hacer esto si funciona en su archivo settings.py agregue esta línea a las aplicaciones instaladas

'basic_app.apps.Basic_appConfig'

0
Am_clifford 27 oct. 2019 a las 10:18