我的第一个django项目

时间:2010-08-18 19:55:54

标签: django

我开始浏览Django的权威指南,现在我想开始自己的项目。我有Django设置和一切。我创建了一个名为djangoproject1的项目。基本上我想要的是主页面是注册/登录页面。我对djangoproject1的urls.py看起来像这样:

urlpatterns = patterns('',
    (r'^/',include('djangoproject1.authentication.urls')),
)

我在djangoproject1下有一个名为authentication的pydev包(应用程序),它有一个urls.py,如下所示:

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

几个问题:

  1. 我找不到页面错误,这意味着我可能正在进行映射/包含错误
  2. 如果我没有在settings.py中的TEMPLATE_DIRS下指定任何内容,我的理解是Django将在每个包中查找名为templates的目录。这是对的吗?

3 个答案:

答案 0 :(得分:2)

Asinox说的不是真的。您可以拥有一个全局模板目录,甚至是其中的几个。但这不是必须的。

实际上模板加载如下:

  1. Django从TEMPLATE_LOADERS设置变量
  2. 获取头等名称
  3. 它根据名称
  4. 实例化模板加载器
  5. 它尝试使用此实例加载模板
  6. 如果成功 - 返回模板
  7. 如果if无法加载模板 - 它将采用下一个名称,并从2开始重新开始。
  8. 如果TEMPLATE_LOADERS中列出的模板加载器未设置加载模板TemplateDoesNotExist异常,则
  9. 默认情况下,TEMPLATE_LOADERS设置为

    TEMPLATE_LOADERS = (
        'django.template.loaders.filesystem.load_template_source',
        'django.template.loaders.app_directories.load_template_source',
    )
    

    正如Matthew所说,TEMPLATE_DIRS仅由filesystem.load_template_source加载器使用。因此,如果将其从列表中排除,则根本不会对模板加载过程产生任何影响。

    为了找到您的模板,我建议您执行以下操作:

    • 使您的index.html命名空间,即将其设置如下:
    .
    `-- djangoproject1
        `-- authentication
            `-- templates
                `-- authentication
                    `-- index.html
    
    • 加载模板命名空间:
    
        urlpatterns = patterns('',
            (r'^$', direct_to_template, {'template': 'authentication/index.html'}),
        )
    

    除非您这样做,否则您无法确定Django是否从身份验证应用程序加载index.html。

    考虑app_directories.load_template_source模板加载器的行为。

    假设你刚刚定义了两个应用程序 app1 app2 (没有定义其他应用程序)并要求加载模板'path / to / template.html'。< / p>

    加载程序将按特定顺序检查以下路径:

    • project_root / APP1 /模板/路径/到/ template.html
    • project_root / APP2 /模板/路径/到/ template.html

答案 1 :(得分:1)

Django不会自动查找模板目录,但是在settings.py中有一个名为django.template.loaders.app_directories.Loader的模板加载器(默认情况下是这样)。我建议不要使用它,因为它没有命名模板。这意味着在appone / templates下名为index.html的模板将在apptwo / templates下隐藏名为index.html的模板(如果apptwo低于INSTALLED_APPS中的appone。

答案 2 :(得分:0)

是的,Django将在其他地方搜索,但您需要项目下的模板目录。

相关问题