首页 文章

如何在django中从当前应用程序渲染模板?

提问于
浏览
1

我有两个地方的index.html . 一个位于/templates/index.html,另一个位于/myapp/templates/index.html

在我有的设置:

TEMPLATES = [
    dict(BACKEND='django.template.backends.django.DjangoTemplates', DIRS=[

        os.path.join(BASE_DIR, 'templates'),
        os.path.join(BASE_DIR, 'myapp/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',

        ]
    }),
]

在/settings.py中

urlpatterns = [
    url(r'^myapp/(?P<param>\w+)/', include('myapp.urls', namespace='myapp',  app_name='myapp'), name='myapp'),
]

在myapp / urls.py中

urlpatterns = [
    url(r'^$', views.test, name='test'),
]

在myapp / views.py中

def test(request, param):

    response = TemplateResponse(request, 'index.html', {})

    return response

如何从当前应用程序中明确获取index.html,而不是从根模板文件夹中获取?我试过了

response = TemplateResponse(request, 'myapp/index.html', {})

但引发错误:TemplateDoesNotExist

如果我将os.path.join(BASE_DIR,'templates')放在os.path.join(BASE_DIR,'room / templates')之后,可以正常工作 . 没有其他方法可以优先搜索项目中的模板,具体取决于当前的应用程序,命名空间等?

1 回答

  • 2

    将模板放在 templates/<app_name>/<app_name>/templates/<app_name>/ 中 . 它们将由Django自动找到 .

    Django将查看主模板文件夹 templates/<app_name>/<app_name>/templates/<app_name>/ 之后 .

    然后在你看来:

    response = TemplateResponse(request, '<app_name>/index.html', {})
    

相关问题