2013-03-14 3 views
22

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

Так я добавил к следующему коду в urls.py в корне проекта:

from django.views.generic.simple import direct_to_template 

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

Проблема заключается в том, что он ищет шаблон в блоге/шаблоны/... Вместо папки шаблонов в моем корне. Который содержит 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')), 
) 

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

ли я с видом на что-то?

+0

Можете ли вы опубликовать ваш полный urls.py? – Brandon

+0

@Brandon добавил: – Kevinvhengst

ответ

49

Вы установили 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 
    ... 
+0

Thx! Я изменил настройки в файле setteings.py, и все работает по назначению! thx alot :) Мне все еще трудно разобраться в некоторых поблемах, связанных с параметрами settings.py. Я рад, что он работает. Большое спасибо! – Kevinvhengst

+0

@KevinvanHengst Нет проблем, когда я начал, я столкнулся с подобными проблемами и долгое время должен был выкапывать ответ, радуясь, что смогу помочь. – Ngenator

+0

Спасибо за отличный ответ. Я делаю это сейчас, и шаблоны приложений работают, но расширение шаблона проекта - нет. Загрузчик шаблонов продолжает поиск только в папке приложения. Какие-либо предложения? – cbrad

2

я бы реорганизовать URLs как таковой:

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

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

+0

Он по-прежнему пытается загрузить шаблоны из блога/шаблонов. Я просмотрел параметры settings.py, если я придумал что-то с TEMPLATE_DIR, но не указал его. Поэтому им все еще любопытно, как он получает этот путь. – Kevinvhengst

+0

Я бы рекомендовал установить каталог шаблонов. – Brandon

+0

Да, загляните в '' TEMPLATE_DIR'' в '' settings.py'', и вы найдете что-то. Подробнее об этом параметре в документации Django, возможно, исправьте. –

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

Я думаю, это зависит от того, что вы хотите, чтобы ваша домашняя страница была. Если это просто страница со ссылками на другие части вашего сайта, то ответ 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