一尘不染

Django模板路径

django

我正在Windows 7环境中的http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02上关注此教程。我的设置文件是:

TEMPLATE_DIRS = (
    'C:/django-project/myapp/mytemplates/admin'
)

base_templateadmin/base_site.htmlDjango本身的源代码(django / contrib / admin / templates)的默认Django admin模板目录中的模板中获取了该模板,并将其按照本教程的说明放入myapp目录的admin子目录中。

由于某种原因,它似乎并没有产生影响。有什么问题的线索吗?我需要做一个同步数据库吗?


阅读 345

收藏
2020-03-29

共1个答案

一尘不染

我知道这不是Django教程中的内容,不要为它们感到羞耻,但是最好为你的path变量设置相对路径。你可以这样设置:

import os

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

...

MEDIA_ROOT = PROJECT_PATH + '/media/'

TEMPLATE_DIRS = (
    PROJECT_PATH + '/templates/',
)

这样,你可以移动Django项目,并且路径根将自动更新。当你设置生产服务器时,这很有用。

其次,你的TEMPLATE_DIRS路径中存在可疑之处。它应该指向模板目录的根目录。同样,它也应该以结尾结尾/

我只是在这里猜测该.../admin/目录不是你的模板根目录。如果仍要编写绝对路径,则应删除对管理模板目录的引用。

TEMPLATE_DIRS = (
    'C:/django-project/myapp/mytemplates/'
)

话虽如此,默认情况下,应将模板加载器设置为递归地遍历你的应用程序目录以查找模板文件。

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

除非你特别想覆盖某些内容,否则无需复制管理模板。

如果尚未运行syncdb,则必须运行它。如果你通过runserver托管django,则还需要静态地管理媒体文件。

2020-03-29