在呈现django templateresponse之前,使用类似于上下文处理器的功能修改上下文数据

django-contextaware-processors的Python项目详细描述


Author:Keryn Knight
Version:0.1.1
ReleaseStatus
stable (0.1.1)travis_stable
mastertravis_master

What it does

曾经用过Django并且希望你能有一个context processor 接收现有的上下文,连同请求一起,以便它能够做 不同的东西取决于视图提供的值?这样做,就像 只要使用TemplateResponse对象而不是render()render_to_response()

Installation

您可以使用pipPyPI安装0.1.1版本:

pip install django-contextaware-processors==0.1.1

或者你可以从GitHub中像这样获取它:

pip install -e git+https://github.com/kezabelle/django-contextaware-processors.git#egg=django-contextaware-processors

Usage

将新的CONTEXTAWARE_PROCESSORS设置添加到项目配置中。它 应该是表示到您的 处理器,与Django上下文处理器配置相同:

CONTEXTAWARE_PROCESSORS = ('path.to.my_processor', 'another_processor.lives.here')

处理器按照声明的顺序执行,并更新 原始上下文数据。新的上下文被赋予后续处理器,例如 上面的最后一个处理器(another_processor.lives.here)将看到 由path.to.my_processor所做的更改。

Using the middleware

在大多数情况下,如果您使用的是TemplateResponse对象(或任何为您使用它们的Class Based View),则需要使用 中间件:

MIDDLEWARE_CLASSES = (
    # ...
    'contextaware_processors.middleware.ContextawareProcessors',
    # ...
)

因为这利用了process_response(request, response),所以您可能需要 它在靠近底部的某个地方,所以它在离开时修改了上下文 尽快。中间件将自动应用任何处理器 定义于CONTEXTAWARE_PROCESSORS

Using the TemplateResponse subclass

对于自定义情况,有 context_processors.response.ContextawareTemplateResponse类 公开一个add_context_callback(callback_function),可用于 应用视图特定的上下文修饰符,尽管您需要的原因不是 对我来说是显而易见的;) 如果ContextawareProcessors中间件注意到ContextawareTemplateResponse它 将在前面的之后添加在CONTEXTAWARE_PROCESSORS中定义的那些 已注册的自定义修饰符。

Writing a context-aware processor

处理器的api协定与普通上下文处理器相同,但是 添加了一个context参数,作为名为kwarg发送。

普通的上下文处理器看起来像:

def my_processor(request):
    return {'MY_VALUE': 1}

而上下文感知处理器看起来像:

def my_processor(request, context):
    if 'MY_KEY' in context:
        return {'MY_VALUE': 2}
    return {'MY_VALUE': None}

Return values

上下文感知处理器必须返回以下三项之一: -现有上下文中的A^ {TT16} $到{TT1717$ $, -NotImplemented可用于将其标记为与请求无关 -为了方便起见,None还可以用于跳过更新上下文。

Supported Django versions

测试是针对Django1.8到1.10以及python 2.7、3.3、3.4和3.5运行的。

Running the tests

如果您有克隆副本,可以执行以下操作:

python setup.py test

如果你有毒物,你可以这样做:

tox

Contributing

求你了!

项目位于kezabelle/django-contextaware-processors中的GitHub上。 储存库。

错误报告和功能请求可以在存储库的issue tracker中归档。

如果可以在140个字符的块中讨论某些内容,那么还有my Twitter account

The license

FreeBSD。在存储库的根目录和任何存档中都应该有一个LICENSE文件。


版权所有(C)2017,Keryn Knight 保留所有权利。

在满足以下条件的情况下,允许以源代码和二进制格式重新分发和使用(无论是否修改):

  1. 源代码的重新发布必须保留上述版权声明、此条件列表和以下免责声明。
  2. 以二进制形式重新分发必须在分发时提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。

此软件由著作权人和出资人提供,如“是”,任何明示或默示保证,包括但不限于,适销性和适合特定目的的默示保证。在任何情况下,版权持有人或贡献者均不对任何直接、间接、附带、特殊、惩戒性或后果性损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论其原因如何,也不论其责任理论是否在合同中,严格责任,或因使用本软件而产生的侵权行为(包括疏忽或其他),即使被告知此类损害的可能性。


欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Hibernate@ManyToMany mapping只在一个方向上在数据库中添加记录   java将文件上载到tomcat服务器外部的文件夹   java将摄像头捕获的图像上传到服务器   java如何创建Rest API并为进程添加时间延迟?   springmodulesvalidation0中缺少java注释包。8a源文件   如何在java中打印SOAP头   Spring security中的java自定义消息,包括UserDetailsService实现和异常   java如何使用Htmlunit中的表单数据登录站点   web如何在WildFly上自动运行java文件   java如何从已经使用另一个方法传递的参数的方法中获取返回值?   java我在JFrame上有一个索引越界。setContentPane   java中的循环序列/系列打印   java maven 3 webapp没有要运行的测试吗?   java CORS不允许POST请求   java再次在派生类中的Jackson中添加字段,该字段在基类中被忽略   爪哇坑测试显示仆从由于超时而异常退出   java寻找第10001个素数   java jboss是否更改web应用程序上下文根?