【问题标题】:Rendering common session information in every view在每个视图中呈现公共会话信息
【发布时间】:2010-11-12 00:59:23
【问题描述】:

我想输出一些依赖于 Django 中会话数据的信息。让我们以“Login”/“Logged in as | Logout”片段为例。这取决于我的request.session['user']

当然,我可以在每次渲染页面时将用户对象放在上下文中,然后打开 {% if user %},但这似乎打破了 DRY 的想法——我必须将用户添加到每个视图的每个上下文中。

如何提取这样的片段并使其更常见?

【问题讨论】:

    标签: python django session templates


    【解决方案1】:

    您是否试图让您网站的某些区域只有在登录时才能访问?还是特定页面的某些区域?

    如果您想阻止对整个 URL 的访问,您可以在视图中的函数中使用 @login_required 装饰器来阻止某些访问。此外,您可以使用包含将需要用户登录的网站的公共部分保留在包含在内的单独 html 中,这样您只需编写一次 if 语句。

    【讨论】:

      【解决方案2】:

      使用template inheritance 从适当使用上下文公共部分的公共基础派生所有模板,并使用工厂函数创建所有上下文,以确保将这些公共部分插入其中。

      【讨论】:

      • 我实际上期待一些装饰器的魔法......但是,嘿 - 这个解决方案也有效:D
      • @viraptor,很高兴听到这个消息 - 我认为,当可以更注重简单性来完成某些事情时,通常最好避免使用魔法!
      【解决方案3】:

      您可能希望使用包含逻辑的上下文处理器,并将其放入您可以在任何页面中使用的变量中,而无需将其添加到每次调用中。

      How to pass common dictionary data to every page in django查看更多信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-28
        • 2017-10-31
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 2019-12-27
        相关资源
        最近更新 更多