urls examples bootstrap django django-templates

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"}), )