如何动态选择烧瓶中要使用的模板目录?

发布于 2021-01-29 19:02:47

默认情况下,flask使用存储在“ template”目录中的模板文件:

/flaskapp
    /application.py
    /templates
        /hello.html

有什么方法可以根据登录用户动态选择模板目录?这就是我想要的目录结构:

/flaskapp
    /application.py
    /templates (default template goes here)
        /hello.html
    /userdata
        /user1
            /template1
                 hello.html
            /template2
                 hello.html
        /user2
            /template1
                 hello.html
            /template2
                 hello.html

现在,如果我具有登录用户的用户名和用户激活的模板的名称,是否可以动态选择要加载模板文件的目录?例如,

/userdata/<username>/<activated template name>/

而不是固定的

/templates/

我要实现的目标是为我的Web应用程序提供一个类似wordpress的主题系统,用户可以在其中上传/选择其网站的主题。

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    也有可能覆盖Jinja加载程序并设置Jinja将在其中寻找模板的路径。喜欢:

    my_loader = jinja2.ChoiceLoader([
            app.jinja_loader,
            jinja2.FileSystemLoader(['/flaskapp/userdata', 
                                     '/flaskapp/templates']),
        ])
    app.jinja_loader = my_loader
    

    目录按照Jinja首先需要查找的顺序进行排列。然后,从视图中可以渲染用户特定的模板,如下所示:

    render_template('%s/template1/hello.html' % username)
    

    您可以在视图中动态更改用户名的位置。当然,您也可以在那里选择要渲染的模板(1或2)。但是基本上,您真正想念的是带有自定义路径的自定义Jinja加载程序。

    希望能帮助或提出想法:)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看