examples - render django
Carpetas de plantillas Django (4)
Estoy experimentando con Django y descubriendo cómo configurar urls.py y cómo funcionan las urls. He configurado urls.py en la raíz del proyecto, para dirigir a mi blog y admin. Pero ahora quiero agregar una página a mi casa, así que en localhost: 8000.
Así que he agregado al siguiente código a urls.py en la raíz del proyecto:
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('''',
(r"^$", direct_to_template, {"template": "base.html"}),
)
El problema es que busca la plantilla en blog / templates / ... En lugar de la carpeta de plantillas en mi raíz. Que contiene la base.html
urls.py completo:
from django.conf.urls import patterns, include, url
from django.views.generic.simple import direct_to_template
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('''',
(r"^$", direct_to_template, {"template": "base.html"}),
url(r''^blog/'', include(''hellodjango.blog.urls'')),
url(r''^admin/doc/'', include(''django.contrib.admindocs.urls'')),
url(r''^admin/'', include(admin.site.urls)),
(r''^tinymce/'', include(''tinymce.urls'')),
)
EDIT: añadido urls.py completo :)
¿Estoy pasando por alto algo?
¿Estableciste TEMPLATE_DIRS
en tu settings.py
? Compruebe y asegúrese de que está configurado correctamente con rutas absolutas. Así es como me aseguro de que esté correctamente configurado:
settings.py
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don''t forget to use absolute paths, not relative paths.
os.path.join(PROJECT_ROOT, ''templates'').replace(''//',''/''),
)
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
''django.template.loaders.filesystem.Loader'',
''django.template.loaders.app_directories.Loader'',
# ''django.template.loaders.eggs.Loader'',
)
De esta manera, tengo una carpeta de templates
en la raíz de mi proyecto que se usa para las plantillas que no son de aplicación y cada aplicación tiene una carpeta de templates/appname
aplicación dentro de la propia aplicación.
Si desea usar una plantilla de la carpeta de plantillas raíz, solo debe dar el nombre de la plantilla como ''base.html''
y si desea usar una plantilla de aplicación, use ''appname/base.html''
Estructura de la carpeta:
project/
appname/
templates/
appname/ <-- another folder with app name so ''appname/base.html'' is from here
base.html
views.py
...
templates/ <-- root template folder so ''base.html'' is from here
base.html
settings.py
views.py
...
Creo que depende de lo que quieras que sea tu página de inicio. Si es simplemente una página con enlaces a otras partes de su sitio, entonces catherine''s respuesta catherine''s es una forma limpia y agradable.
Si quieres que la raíz de tu sitio sea tu blog, por ejemplo, yo haría esto:
urlpatterns = patterns('''',
# Django Admin
url(r''^admin/'', include(admin.site.urls)),
# Tiny MCE Urls
url(r''^tinymce/'', include(''tinymce.urls'')),
# Other App
url(r''^other/'', include(''projectname.other.urls'', namespace=''other'')),
# Blog App
url(r''^'', include(''projectname.blog.urls'', namespace=''blog'')),
)
Además, no olvide nombrar el espacio que incluye su url: https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces
Reorganizaría las URL como tales:
urlpatterns = patterns('''',
(r''^admin/doc/'', include(''django.contrib.admindocs.urls'')),
(r''^admin/'', include(admin.site.urls)),
(r''^tinymce/'', include(''tinymce.urls'')),
(r''^blog/'', include(''hellodjango.blog.urls'')),
(r''^$'', direct_to_template, {"template": "base.html"}),
)
Los patrones se combinan con su especificidad, por lo que tiendo a poner primero los patrones más específicos. De lo contrario podría ver algún comportamiento inesperado. Inténtalo, y si todavía está cargando una plantilla de tu blog en una solicitud a /
, profundizaremos.
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('''',
url(r''^blog/'', include(''hellodjango.blog.urls'')),
url(r''^admin/doc/'', include(''django.contrib.admindocs.urls'')),
url(r''^admin/'', include(admin.site.urls)),
url(r''^tinymce/'', include(''tinymce.urls'')),
)
urlpatterns += patterns(
''django.views.generic.simple'',
(r''^'', ''direct_to_template'', {"template": "base.html"}),
)