我正在尝试使用Django,并弄清楚如何设置urls.py以及URL如何工作。我已经在项目的根目录中配置了urls.py,以定向到我的博客和管理员。但是,现在我想在首页添加一个页面,所以在localhost:8000。
localhost:8000
因此,我在项目根目录的urls.py中添加了以下代码:
from django.views.generic.simple import direct_to_template urlpatterns = patterns('', (r"^$", direct_to_template, {"template": "base.html"}), )
问题是它在blog / templates / …中搜索模板, 而不是在我的根目录中搜索template文件夹。其中包含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')), )
你设置好TEMPLATE_DIRS了settings.py吗?检查并确保使用绝对路径正确设置了它。这是我确保正确设置的方式:
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文件夹,每个应用程序内部都有一个文件夹。
templates
templates/appname
如果要使用根模板文件夹中的模板'base.html',则只需输入模板名称,例如,如果要使用应用程序模板,则使用'appname/base.html'
'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 ...