您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django视图-首先从调用应用程序的目录加载模板

Django视图-首先从调用应用程序的目录加载模板

原因是app_directories加载程序与将每个应用程序的模板文件添加到TEMPLATE_DIRS设置基本相同,例如

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'app1', 'templates'),
    os.path.join(PROJECT_PATH, 'app2', 'template'),
    ...
    os.path.join(PROJECT_PATH, 'templates'),
)

问题是,正如你提到的,index.html将始终在app1 / templates / index.html中找到,而不是其他任何应用程序。没有简单的方法可以魔术地解决此问题,而无需修改app_directories加载程序并使用自省或传递应用程序信息,这变得有些复杂。一个更简单的解决方案:

一个更具体的例子:

project
    app1
        templates
            app1
                index.html
                add.html
                ...
        models.py
        views.py
        ...
    app2
        ...

然后在视图中:

def index(request):
    return render_to_response('app1/index.html', locals())

你甚至可以编写包装器来自动在所有视图之前添加应用程序名称,甚至可以扩展为使用自省功能,例如:

def render(template, data=None):
    return render_to_response(__name__.split(".")[-2] + '/' + template, data)

def index(request):
    return render('index.html', locals())

___。split(“。”)[-2]假定文件在软件包中,因此它将例如’app1.views’转换为’app1’以添加为模板名称。这还假设用户在不重命名模板目录中的文件夹的情况下将永远不会重命名你的应用程序,这可能不是一个安全的假设,在这种情况下,只需将模板目录中的文件名称硬编码即可。

Go 2022/1/1 18:18:02 有425人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶