it-swarm.com.ru

Папки с шаблонами 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"}),
)

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

полный 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')),
)

Правка: добавлен полный urls.py :)

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

26
Kevinvhengst

Вы установили 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
  ...
56
Ngenator
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"}),
)
4
catherine

Я бы реорганизовал 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"}),
)

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

2
Brandon

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

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

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

0
krak3n