未检测到Django 1.8应用程序模板

时间:2015-10-22 17:29:04

标签: django django-templates

未加载已更改的应用模板文件,以下是我的设置:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            # os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
                # list if you haven't customized them:
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
                'django.core.context_processors.request',
            ],
        },
    },
]

模板结构的屏幕(Url是型号名称):

enter image description here

我错过了什么? (关键字app确实在installed_apps中)

编辑:尝试取消注释#dirs但它仍然无效。

这可能会让事情变得混乱(在设置之上):

 BASE_DIR = os.path.dirname(os.path.dirname(__file__))

如果我删除这一行,则会给出502error。(nginx)

编辑2:

如果我将BASE_DIR更改为:BASE_DIR = os.path.dirname(os.path.abspath( file ))

然后它开始阅读模板但是从PROJECT而不是app模板文件(django_project / django_project / templates / admin)是否可以更改它以便从app目录中读取?

2 个答案:

答案 0 :(得分:3)

  1. 您必须了解如何配置模板引擎:
  2.   

    这是一个简单的设置,告诉Django模板引擎加载   每个安装的templates子目录中的模板   应用程序( APP_DIRS :True):

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'APP_DIRS': True,
            'DIRS': []
        },
    ]
    

    DIRS 列表允许您添加Django搜索模板的其他文件夹

    Django建议为每个应用整理这样的模板: django_project / app / templates / app /
    在您的情况下: django_project / keyword / templates / keyword /

    这是您的最终架构:

    django_project
    ├── keyword
    │   ├── migrations
    │   ├── static
    │   ├── templates
    │   │   └── keyword
    │   │       ├── admin
    │   │       │   ├── Url
    │   │       │   │   ├── base_site.html
    │   │       │   │   └── change_list.html
    │   │       │   └── base_site.html
    │   │       ├── base.html
    │   │       ├── embeds.html
    │   │       └── index.html
    │   ├── __init__.py
    │   ├── tests.py
    │   ├── models.py
    │   ├── forms.py
    │   └── views.py
    ├── django_project 
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    └── manage.py
    

    由于模板引擎搜索每个 app / templates / ,因此在应用视图中,您可以定义模板的相对路径。

    例如:

    render(request, 'keyword/admin/base_site.html', context)
    

答案 1 :(得分:1)

试试这个:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
            os.path.join(BASE_DIR, 'templates/admin'),
            os.path.join(BASE_DIR, 'templates/Url'),
        ],

这样,Django也知道要查看templates文件夹的子目录。