如何在django中自定义第三方包

时间:2014-03-04 04:40:43

标签: django

我找不到任何可以显示正确方法的明确指南。例如,我正在为我的django网站使用包django-two-factor-auth。我想在模板中添加一个上下文变量并显示它。我在templates模板文件夹中创建了一个文件夹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

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

1 个答案:

答案 0 :(得分:1)

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

  

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