Подтвердить что ты не робот

Папки шаблонов Django

Я экспериментирую с Django и выясняю, как установить urls.py и как работают URL. Я настроил urls.py в корне проекта, чтобы направлять его на мой блог и администратора. Но теперь я хочу добавить страницу в свой дом, поэтому на localhost: 8000.

Итак, я добавил следующий код к urls.py в корень проекта:

from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
    (r"^$", direct_to_template, {"template": "base.html"}),
)

Проблема в том, что он ищет шаблон в блоге/шаблонах/... Вместо папки шаблонов в моем корне. Что содержит base.html

full urls.py:

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: добавлен полный urls.py:)

Я что-то пропускаю?

4b9b3361

Ответ 1

Вы установили TEMPLATE_DIRS в свой settings.py? Проверьте и убедитесь, что он настроен правильно с абсолютными путями. Вот как я убедился, что он правильно установлен:

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',
)

Таким образом, у меня есть папка templates в корне моего проекта, которая используется для шаблонов без приложения, и у каждого приложения есть папка templates/appname внутри самого приложения.

Если вы хотите использовать шаблон из папки корневого шаблона, просто укажите имя шаблона, например 'base.html', и если вы хотите использовать шаблон приложения, вы используете 'appname/base.html'

Структура папки:

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
  ...

Ответ 2

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

Ответ 3

Я бы повторно упорядочил URL как таковой:

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

Шаблоны соответствуют их специфичности, поэтому я сначала ставил более конкретные шаблоны. В противном случае вы можете увидеть какое-то неожиданное поведение. Попробуйте, и если он по-прежнему загружает шаблон из вашего блога по запросу /, мы будем копать глубже.

Ответ 4

Я думаю, это зависит от того, что вы хотите, чтобы ваша домашняя страница была. Если это просто страница со ссылками на другие части вашего сайта, то ответ catherine's - это хороший чистый способ.

Если вы хотите, чтобы корень вашего сайта был вашим блогом, например, я бы сделал следующее:

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')),
)

Также не забудьте указать пространство, в которое входит ваш url: https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces