使用金字塔、遍历和PyMong更改模板

2024-04-26 10:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我想实现类似WordPress模板主题引擎的东西,我应该如何使用金字塔、遍历和使用MongoDB作为数据库来实现它呢。在

我试着在Extending An Existing Pyramid Application上查过,但一点意义都没有。。。在


基本上,在管理控制面板中,当所有者转到www.mydomain.com/admin/template时,页面将显示位于say/static/themes/中的所有主题文件夹。在

当管理员选择主题“mybluetheme”时,该主题将存储在MongoDB中。所以,当我在www.mydomain.com/中查看它时,它将使用“mybluetheme”显示主题。 如果明天,管理员选择“mygreentheme”,站点将呈现“mygreentheme”。在


Tags: 引擎coman模板数据库主题mongodb管理员
1条回答
网友
1楼 · 发布于 2024-04-26 10:25:32

对wordpress模板主题引擎一无所知,我想向您展示如何根据某些条件交换基本模板:

from pyramid.renderers import get_renderer
from pyramid.security import authenticated_userid

class Theme(object):

    def __init__(self, context, request):
        self.context = context
        self.request = request

    @property
    def layout(self):
        if utils.likes_blue_color(authenticated_userid(self.request)):
            template_name = 'templates/blue_layout.pt'
        else:
            template_name = 'templates/green_layout.pt'
        return get_renderer(template_name).implementation()

@view_config(...)
def index(context, request):

    theme = Theme(context, request)

    return { 'context':context,
             'request': request,
             'theme':theme,
           }

布局模板看起来像

^{pr2}$

其余模板将使用如下所示:

^{3}$

使用这种方法,您将能够基于某些参数(请求中的值、cookie、数据库中的用户设置等)交换基本模板

使用Jinja2模板,方法是类似的-您需要在视图函数中找到基模板并将引用传递给基模板对象,或者将基模板的文件名传递给函数。从Jinja2 documentation看来,{% extends my_base_template_passed_from_the_view_function %}语法可能有效。否则,您可能需要指定一个自定义模板加载器来根据某些条件加载不同的模板。在

相关问题 更多 >