如何在Django的不同目录中调用具有相同名称的模板?

x0x*_*x0x 3 python django templates

使用Django 1.8

我有两个同名的模板,

base.html/mysite/templates/base.html

和另一个来自位置相同名称(base.html)的应用程序, /mysite/app/templates/base.html

我的模板设置,

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
Run Code Online (Sandbox Code Playgroud)

视图

def home(request):
    c = { name: 'myname', username: 'myusername'}
    return render(request, 'base.html', c)
Run Code Online (Sandbox Code Playgroud)

这会调用项目根目录中的"base.html",但是如何从app/template目录中调用模板.

谢谢你的参考!

更新:

我已将应用位置添加到模板目录中,

'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'app/templates')],
Run Code Online (Sandbox Code Playgroud)

现在我的IDE显示了两个文件,仍然base.html呈现了根.如何引用另一个模板?

更新:修复了在应用模板级别添加一个目录.

现在我的app模板目录结构如下所示,

mysite/app/templates/app/base.html

os.path.join(BASE_DIR, 'app/templates') 如果应用程序位于已安装的应用程序元组中,则不需要TEMPLATE DIR.

欢迎使用更高效的Django 1.8解决方案.

Ben*_*Ben 6

使用您当前的目录结构,您不能 - 这样就可以让您在以后的INSTALLED_APPS设置中通过应用覆盖模板.惯例是使用更像的目录结构:

app1/templates/app1/base.html
app2/templates/app2/base.html
Run Code Online (Sandbox Code Playgroud)

然后使用app1/base.htmlapp2/base.html引用你想要的那个.

编辑

为了更清楚我的意思:您的项目结构可能如下所示:

mysite
    - templates
        - base.html
    - manage.py (etc...)
    - app
        - models.py (etc...)
        - templates
            - app
                - base.html
Run Code Online (Sandbox Code Playgroud)

然后你可以使用base.html获取第一个并app/base.html获得另一个 - 相关的应用程序模板都打包在他们引用的应用程序中,但是是命名空间.