【问题标题】:How to customize third-party package in django如何在django中自定义第三方包
【发布时间】:2014-03-04 04:40:42
【问题描述】:

我在任何地方都找不到明确的指南来说明正确的方法。例如,我正在为我的 django 网站使用包 django-two-factor-auth。我想在模板中添加一个上下文变量并显示它。我在我的模板文件夹和同名的模板文件中创建了一个文件夹 two_factor。那部分很容易。但是我还需要继承通用视图来添加我的上下文(当然,我不想更改第三方包的源代码)。为此,我在我的项目中创建了一个新应用并将其命名为 two_factor_custom,并将以下代码添加到 views.py:

from binascii import unhexlify
from base64 import b32encode
from two_factor.views.core import SetupView

class SetupViewCustom(SetupView):
  def get_context_data(self, form, **kwargs):
     context = super(SetupViewCustom, self).get_context_data(form, **kwargs)
     if self.steps.current == 'generator':
        key = unhexlify(self.get_key('generator').encode('ascii'))
        context.update({
           'secret': b32encode(key).decode('ascii')
        })
     return context

如果您能说这是扩展或覆盖第三方软件包某些行为的正确方法,我将不胜感激。如果不是我做错了什么?

【问题讨论】:

  • 没有“正确”的方法来扩展应用程序,扩展一个类并覆盖一个方法是很好的方法..
  • 为什么你认为这是错误的方式?

标签: django


【解决方案1】:

您可以通过添加自己的模板上下文处理器来扩展模板上下文。另请参阅Django documentation

TEMPLATE_CONTEXT_PROCESSORS 设置是一个可调用元组 - 称为上下文处理器 - 将请求对象作为参数并返回要合并到上下文中的项目字典。

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多