GVKun编程网logo

REDISTEMPLATE 如何注入到 VALUEOPERATIONS(redistemplate怎么注入)

17

在本文中,您将会了解到关于REDISTEMPLATE如何注入到VALUEOPERATIONS的新资讯,同时我们还将为您解释redistemplate怎么注入的相关在本文中,我们将带你探索REDISTE

在本文中,您将会了解到关于REDISTEMPLATE 如何注入到 VALUEOPERATIONS的新资讯,同时我们还将为您解释redistemplate怎么注入的相关在本文中,我们将带你探索REDISTEMPLATE 如何注入到 VALUEOPERATIONS的奥秘,分析redistemplate怎么注入的特点,并给出一些关于compilation.mainTemplate.applyPluginsWaterfall is not a function、Diversity Regularized Spatiotemporal Attention for Video-based Person Re-identification 翻译、django.template.exceptions.TemplateDoesNotExist: login.html 错误处理、django.template.exceptions.TemplateDoesNotExist: rest_framework/api.html 报错的实用技巧。

本文目录一览:

REDISTEMPLATE 如何注入到 VALUEOPERATIONS(redistemplate怎么注入)

REDISTEMPLATE 如何注入到 VALUEOPERATIONS(redistemplate怎么注入)

 


REDISTEMPLATE 如何注入到 VALUEOPERATIONS

 

今天看到 Spring 操作 redis  是可以将 redisTemplate 注入到 ValueOperations,避免了 ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue (); 这样来获取 ValueOperations;

@Resource(name = "redisTemplate")
private ValueOperations<String, Object> vOps;

redisTemplate 并不是 ValueOperations 的实现类,这两个在继承上毫无联系的两个类是如何注入的呢。

后来查 doGetBean () 的代码才发现有一段以前没有详细的去看。

复制代码
// Check if required type matches the type of the actual bean instance.
        if (requiredType != null && bean != null && !requiredType.isInstance(bean)) {
            try {
                return getTypeConverter().convertIfNecessary(bean, requiredType);
            }
            catch (TypeMismatchException ex) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Failed to convert bean ''" + name + "'' to required type ''" +
                            ClassUtils.getQualifiedName(requiredType) + "''", ex);
                }
                throw new BeanNotOfRequiredTypeException(name, requiredType, bean.getClass());
            }
        }
复制代码

如果你要实例化的对象和你的引用对象并不是同一种类型,也就是如 redisTemplate 和 ValueOperations 一般不是父子关系或接口实现关系,那么 spring 就会进行转换。

用什么转换呢?Spring 的 editor。

复制代码
String editorName = targetType.getName() + "Editor";
        try {
            Class<?> editorClass = cl.loadClass(editorName);
            if (!PropertyEditor.class.isAssignableFrom(editorClass)) {
                if (logger.isWarnEnabled()) {
                    logger.warn("Editor class [" + editorName +
                            "] does not implement [java.beans.PropertyEditor] interface");
                }
                unknownEditorTypes.add(targetType);
                return null;
            }
            return (PropertyEditor) instantiateClass(editorClass);
        }
复制代码

spring 会去加载 ValueOperations+Editor,即 ValueOperationsEditor 的类。且此类必须要实现 PropertyEditor 接口。

而我们在 ValueOperations 的包目录下确实会找到 ValueOperationsEditor。

复制代码
class ValueOperationsEditor extends PropertyEditorSupport {

    public void setValue(Object value) {
        if (value instanceof RedisOperations) {
            super.setValue(((RedisOperations) value).opsForValue());
        } else {
            throw new java.lang.IllegalArgumentException("Editor supports only conversion of type " + RedisOperations.class);
        }
    }
}
复制代码

这个类非常简单,它重写了 setValue 方法,将 redisTemplate 中的 opsForValue () 返回值 set 进去,而 opsForValue () 返回值就是继承了 ValueOperations 的 DefaultValueOperations。

这样我们用 editor get value 的时候就能获取到 DefaultValueOperations 了。就可以将 DefaultValueOperations 注入到 ValueOperations 中去了。

 

做个实验,写两个类

 

复制代码
public class ClassA {
    private String msg;
    public ClassA(String msg){
        this.msg=msg;
    }
    public void hi(){
        System.out.println(msg);
    }
}
复制代码

 

@Component
public class ClassB {
    public ClassA getA(){
        return new ClassA("this is A from B");
    }
}

类 B 有个方法可以获取 A 类实例,我们将此注入到 A 对象中。

复制代码
public class EditorTest extends BaseJunitTest{
    
    @Resource(name="classB")
    private ClassA a; 
    
    @Test   
    public void test(){
        a.hi();
    }
}
复制代码
BaseJunitTest配置了一些spring的XML配置文件 不需要管它。
此时我们还需要写一个ClassAEditor类。如果没有editor类的话当然会注入不了 并抛出一个异常
Bean named ''classB'' is expected to be of type ''xxx.test.ClassA'' but was actually of type ''xxx.test.ClassB''
我们完成ClassAEditor
public class ClassAEditor extends PropertyEditorSupport{
      public void setValue(Object value) {
          super.setValue(((ClassB)value).getA());
      }
}

判断略去不写。

运行程序,得到正确结果

 

非常有意思的一个细节,工厂模式的一种体现。

 

 

 
分类:  Spring

compilation.mainTemplate.applyPluginsWaterfall is not a function

compilation.mainTemplate.applyPluginsWaterfall is not a function

webpack升级后的报错记录

1、提示:
图片.png

2、我的webpack版本为 "webpack": "^4.41.2"

3、然后,搜索了错误提示。
查看了链接地址为:https://github.com/webpack/we...

4、按照别人给的一个个方式去尝试。都通通无效。
大多数人是提议安装最新版的extract-text-webpack-plugin。
我已经安装了。
图片.png

5、又再次搜索,查看链接地址为:https://github.com/jantimon/h...
标题为:
Webpack 4: compilation.mainTemplate.applyPluginsWaterfall is not a function #841

这里让我安装提示来搜索哪里报错。

6、最后,又搜索了stackoverflow,
链接地址:https://stackoverflow.com/que...

错误原因是:
Webpack 4进行了一些过时的更改,并且html-webpack-plugin的作者未更改新要求的代码,因此,此插件不适用于新的webpack 4版本。 核心的webpack团队分叉了这个插件,直到作者更改了此程序包提供的初始代码和他们的fork contrib / html-webpack-plugin 因此,您应该安装此叉子而不是原始叉子。 您可以通过简单地从npm或yarn安装,

所以:安装了html-webpack-plugin的beta版。
安装命令:

npm i --save-dev html-webpack-plugin@next

结果:
图片.png

最后,成功!!!

图片.png

Diversity Regularized Spatiotemporal Attention for Video-based Person Re-identification 翻译

Diversity Regularized Spatiotemporal Attention for Video-based Person Re-identification 翻译

                      基于视频的人体再识别的时间规整化时空注意

                            


项目地址:https://github.com/ShuangLI59/Diversity-Regularized-Spatiotemporal-Attention


摘要

基于视频的人体重新识别匹配非重叠摄像机的人的视频剪辑。

大多数现有方法通过将每个视频帧整体编码并计算所有帧之间的聚合表示来解决这个问题。

在实践中,人们经常被部分遮挡,这会破坏所提取的特征

相反,我们提出了一个新的时空注意力模型,自动发现不同的一组独特的身体部位。这允许从所有帧中提取有用信息而不屈服于遮挡和错位。

网络学习多个空间注意力模型,并采用多样性规则化项来确保多个模型不发现相同的身体部分。从局部图像区域提取的特征由空间注意力模型组织,并使用时间注意组合。

结果,网络使用来自整个视频序列的最佳可用图像补丁来学习面部、躯干和其他身体部位的潜在表示。对三个数据集的广泛评估表明,我们的框架在多个度量上大大优于最先进的方法。

介绍

本文提出了一种新的时空注意方案,有效地解决了基于视频的人再识别问题。

我们使用多个空间注意模型来定位,而不是直接编码整个图像(或预定义的分解,如网格)。

区分图像区域,并使用时间注意力跨时间提取这些提取的局部特征。

我们的方法有几个有用的特性

空间注意明确地解决了图像之间的对齐问题,避免了特征被遮挡区域破坏。

虽然许多有区别的图像区域与身体部位相对应,但是诸如太阳镜、背包和帽子之类的配件是普遍存在的,并且对于身份验证是有用的。由于这些类别很难预先定义,我们采用无监督学习方法,并让神经网络自动发现一组可区分的对象部分检测器(空间注意模型)。

我们使用基于Hellinger距离的新的多样性正则化术语,以确保多个空间注意模型不会发现相同的身体部分。

我们使用时间注意模型来计算由每个空间注意模型提取的特征的聚合表示。然后,这些聚合表示被连接成一个最终的特征向量,该特征向量表示整个视频中可用的所有信息。

我们证明了我们的方法在三个挑战性的视频再识别数据集的有效性。我们的技术在多个评价指标下执行最先进的方法。

相关工作

首次提出多人跟踪的人重新识别[42, 38],GHISSARI等。

[11]设计了一个时空分割方法来提取视觉线索,并采用颜色和显著边缘进行前景检测。这项工作定义了基于图像的人重新识别作为一个特定的计算机视觉任务。

基于图像的人再识别主要集中于两类:提取鉴别特征[13,9,33,19,43]和学习鲁棒度量[37,50,18,36,2]。近年来,研究人员提出了许多基于深度学习的方法[1,24,8,20,44]来联合处理这两个方面。

艾哈迈德等人[1]将一对剪切的行人图像输入到具有二进制验证损失函数的特定设计的CNN,用于重新识别人。

在[8]中,Ding等人在训练深层神经网络时通过采用三重损失函数来最小化同一人之间的特征距离并最大化不同人之间的距离。肖等人(44)在单一的CNN模型中联合训练行人检测和人员重新识别。他们提出了一种在线实例匹配损失函数,该函数能够更有效地学习大规模验证问题中的特征。

基于视频的人重新识别

基于视频的人重新识别[35, 52, 46,41, 53, 34]是基于图像的方法的扩展。而不是成对的图像,学习算法给出了对视频序列。

在[46]中,You等人提出了一个顶推式远程学习模型,该模型伴随类内变化的最小化,以优化用于人员重新识别的顶级匹配精度。麦克劳林等。

[35]介绍了一种对时间信息进行编码的RNN模型。它们利用时间池来选择每个特征维度上的最大激活,并计算两个视频的特征相似度。

Wang等人[41]从噪声/不完整的图像序列中选择可靠的时空特征,同时学习视频排序函数。

MA等人[34]编码多个时空动态的粒度,以生成每个人体的潜在表示。在不精确和不完全序列之间选择和匹配数据的时移动态时间弯曲模型。

注意模型重新识别人体

注意力模型[45, 22, 21]自[45]以来就越来越流行。

周等人[52]通过构建端到端的深度神经网络,结合空间和时间信息。注意力模型根据RNN的隐藏状态将重要性分数分配给输入帧,最后的特征是RNN的输出的时间平均池。然而,如果以这种方式训练,注意力模型的不同时间步长的对应权重趋向于具有相同的值。

Liu等人[30]提出了一种多向注意模块来利用全局和局部内容进行基于图像的人再识别。然而,联合训练多个注意力可能导致模式崩溃。网络必须仔细训练,以避免注意力集中在具有高冗余度的相似区域上。

本文时空注意力结合到时空注意力模型中,以解决基于视频的人再识别问题。

对于空间注意,我们使用惩罚项来规范多个冗余注意。

我们利用时间注意力在每帧的基础上对不同的显著区域分配权重,以充分利用鉴别图像区域。

我们的方法演示了更好的经验性能,并分解成直观的网络架构。

方法1——限制随机抽样

以前的基于视频的人再识别方法[35,34,52]不建模远程时间结构,因为输入的视频序列相对较短。

在某种程度上,由于连续视频帧是高度相关的,并且从一个帧中提取的视觉特征在短序列过程中不会发生显著变化,因此这种范例仅比基于图像的重新识别稍微复杂一些。

然而,当输入视频序列较长时,任何重新识别方法都必须能够应对随时间的显著视觉变化,例如相对于相机的不同身体姿势和角度。

Wang等人[39]提出了一种时间段网络来生成用于动作识别的视频片段。

受其启发,我们提出一个受限随机抽样策略来产生长视频序列的紧致表示,该长视频序列仍旧提供原始数据的良好表示。

我们的方法使模型能够利用来自整个视频的视觉信息,并避免序列帧之间的冗余。

给定输入视频V,我们将其分成N个块{Cn} n=1,N相等的持续时间。从每个块Cn,我们随机采样图像In。视频然后由采样帧{In } n=1,N的有序集合表示。

方法2——多空间注意力模型

我们使用多个空间注意力模型自动发现对重新识别有用的显著图像区域(身体部位或附件)。

我们的方法不是预先定义输入图像的刚性空间分解(例如网格结构),而是自动识别每个图像中跨多个训练视频一致出现多个不相交显著区域

因为网络学习识别和定位这些区域(例如,自动发现一组对象部件检测器),我们的方法减轻了由姿态变化尺度变化遮挡引起的配准问题。

我们的方法并不局限于检测人体部位

它可以集中于任何信息丰富的图像区域,如帽子、袋子和在重新识别数据集中经常发现的其他附件。 直接从整个图像生成的特征表示可以容易地忽略细粒度视觉线索(图1)。

另一方面,多种多样的空间注意力模型能够同时发现有区别的视觉特征,同时减少背景内容和遮挡的干扰。虽然空间注意力不是一个新概念,但就我们所知,这是第一次设计一个网络来自动发现图像帧中跨多个视频一致的一组不同注意力。

图1:时空注意

在具有挑战性的视频重新识别场景中,一个人很少在所有帧中完全可见。 然而,只有一部分人可见的帧通常包含有用的信息。例如,在框架1和2、框架2中的躯干和框架2, 3和N中的手提包中可以清楚地看到面部。 我们提出了一种新的时空方法,它学习检测每帧内的一组K个不同的显著图像区域(叠加的热图),而不是对整个帧的特征进行时间平均。 然后,通过组合在时间上提取的每帧区域(以白色文本显示的权重)来生成每个身体部分的聚合表示。 我们的时空方法通过利用多个空间注意模型,并使用多个时间注意模型组合它们的输出,创建了利用每个帧中有用的部分信息的视频的紧凑编码。                 

                                             

如图2所示,我们采用ResNet-50CNN体系结构[14]作为我们的基本模型,用于从每个采样图像中提取特征。

CNN前面有卷积层(命名为conv1),后面有四个残差块。我们利用conv1作为特征提取器res5c。

结果,每个图像In由8×4个特征向量网格{fn,ε}ε=1,L表示,其中L=32是网格单元的数目,并且每个特征是D=2048维向量。

然后训练多注意模型以定位训练数据中的区分图像区域(区分对象部分)。

对于第K个模型,K∈{1,...,k},给予单元中的特征向量的空间注意量sn,k,ε基于通过两个线性变换传递特征向量而产生的响应en,k,ε以及两者之间的ReLU激活。

图2。时空注意力网络体系结构。 输入视频被限制为N帧使用限制随机抽样。 (1)使用CNN将每个图像转换为特征映射。 (2)这些特征图被发送到传统网络,然后是softmax函数,以针对每个输入图像生成多个空间注意模型和相应的接收场。多样性正则化术语鼓励学习空间注意力模型,该模型不会导致每个图像的接收字段重叠。每个空间注意力模型发现特定的突出图像区域并生成空间门控特征(图3)。 (3)通过空间注意力模型对所有帧的空间门控特征进行分组。 (4)时间注意计算由每个空间注意力模型生成的特征集的集合表示。最后,将所有身体部位的时空门控特征连接成一个表示整个视频序列中包含的信息的单个特征

                  

明确地,

                                  

是第k空间注意模型要学习的参数。第一线性变换将原始特征投影到较低的d=256维空间,并且第二变换为每个特征/单元生成标量值。然后将每个特征/单元的注意值计算为响应的softmax最大值。

                                                                        

集合Sn,k=[Sn,k,1,……Sn,k,L]的权重定义了图像中第k次空间注意力模型(部分检测器)的接收域。 根据定义,每个接收场是概率质量函数,因为

对于每个图像中,我们使用注意加权平均生成k空间门控视觉特征{xn,k}k=1,k。 

                                                                       

每个门控特征表示输入图像的突出部分(图3)。

因为xn,k是通过在整个网格l∈[1,L]上进行汇聚来计算的,所以空间门控特征不包含关于从其提取的图像位置的信息。

因此,为跨多个图像的特定注意力模型生成的空间选通特征都大致对齐,例如,提取的面部补丁都倾向于将眼睛放在大致相同的像素位置。

图3。学习空间注意力模型。当k=6时,我们的多样性空间注意模型的示例图像和相应的接收场。 我们的方法发现独特的图像区域,这是有用的重新鉴定。 注意力模型主要关注前景区域,并且通常对应于特定的身体部位。每一个栏目的底部都有我们的解释。

                                           

类似于细粒度对象识别[26],我们跨帧汇集信息,以创建每个空间门控特征的增强变体。增强函数E()随后对二阶池[5]的工作进行了跟踪。详情请参阅补充材料。

                                                                            

方法3——多样性正则化

概括的方法学习多个空间注意力模型可以很容易地产生退化的解决方案。对于给定的图像,没有约束由一个注意模型生成的接受字段需要不同于另一个模型的接受字段。

换言之,多个注意力模型可以容易地学会检测同一身体部位。在实践中,我们需要确保每个N空间注意力模型集中在给定图像的不同区域上。

由于每个接收场sn,k具有概率解释,因此一种解决方案是使用Kullback-Leibler散度来评估给定图像的接收场的多样性。 为了便于记号,我们将矩阵Sn∈R K×L定义为由K空间注意模型为图像In生成的接收场的集合:

                                                                           

通常,在softmax()函数之后,注意力矩阵的许多值接近于零,并且当通过Kullback-Leibler发散中的log()操作时,这些小值急剧下降。

在这种情况下,经验证据表明训练过程是不稳定的[27]。

为了鼓励空间注意模型关注于不同的显著区域,我们设计了一个惩罚项,用来测量不同接收场之间的重叠。

假设Sn,i和Sn,j是注意矩阵Sn中的两个注意向量。利用注意向量的概率质量性质,我们利用Hellinger距离[4]来测量sn,i和sn,j的相似性。距离被定义为:

                                            

为了保证接收场的多样性,我们需要最大化sn,i和sn,j之间的距离,这相当于最小化1-H2(sn,i,sn,j)。为了便于记法,我们引入了Rn=Sn,其中Rn中的每个元素都是Sn中相应元素的平方根。因此,测量每个图像的接收场之间的冗余的正则化项是:

                                                                     

其中||·||F表示矩阵的Frobenius范数,I是k维恒等式矩阵。

这个正则化项Q将乘以一个系数,并增加到原始OIM损失。

最近利用递归网络进行文本嵌入的多样性正则化[27]。

在这种情况下,作者采用了我们提出的正则化的变体,为:

                                                                       

Q和Q’虽然有相似的公式,但正则化效果却很不相同。 Q是基于约束 的概率质量分布,而Q′可以表示在任何矩阵上。

Q’鼓励Sn是稀疏的-只偏好沿Sn对角线的非零元素。

虽然Q迫使受力场不重叠,但也鼓励它们集中到单个细胞。

另一方面,Q允许大的突出区域,如“上体”,同时阻碍接受域重叠。

方法4——时间注意

回想一下,每个帧都用集合的K增强空间门控特征,每个由K空间注意力模型中的一个产生。

现在,我们考虑如何最好地组合从单个帧中提取的这些特征,以产生整个输入视频的紧凑表示。

由于自遮挡或来自显式前景遮挡器(图1),对象的所有部分在每个视频帧中都很少可见。

因此,使用每帧权重TN跨越时间汇集特征是不够健壮的,因为一些帧可以包含关于个人的有价值的部分信息(例如,脸、袋子或其他附件的存在等)。

我们没有对从帧In中提取的所有特征应用相同的时间注意权重tn,而是应用多个时间注意权重{tn,1,.…tn,k}到每个帧,每个空间分量一个。

通过这种方法,我们的时间注意模型能够基于不同显著区域的优点来评估框架的重要性。

仅对整个帧特征进行操作的时间注意模型在具有中等遮挡的帧中容易丢失细粒度线索

类似地,基本的时间聚合技术(与时间注意力模型相比),如平均汇聚或最大汇聚通常削弱或过分强调区分特征的贡献(不管汇聚是按帧应用还是按区域应用)。

在我们的实验中,我们将我们提出的每个区域/帧时间注意力模型与在每个区域基础上应用的平均和最大池进行比较,并且确实发现我们的时间注意力模型实现了最大的性能。

与空间注意相似,我们定义了帧n中的空间分量k为线性响应函数的softmax极大值的时间注意tn,k:

                                                                          

其中,是第n帧中第k个空间分量的增强特征,而Wt,k∈R D和bt,k是有待学习的参数。

                                                                              

然后使用时间注意以加权平均的方式在每个组件基础上引导增强的空间特征。

                                                                                         

结合(3)、(4)和(13)总结了我们如何在空间和时间基础上应用注意力来提取和对准每个原始特征fn,l的部分,然后跨时间聚合以产生每个独特的对象区域/部分的潜在表示:

                                                                        

 最后,将每个空间分量的时间门控特征串联起来,生成特征向量x∈R K×D,表示整个输入视频。

                                                                       

方法5——再识别损失

在本文中,我们采用在线实例匹配损失函数(OIM)[44]对整个网络进行训练。

通常,重新识别使用多类softmax层作为客观损失。 通常,小批量样本的数量远小于训练数据集中的标识数量,并且网络参数更新可能存在偏差。

相反,OIM损失函数使用查找表来存储在训练集中出现的所有标识的特征。在每次正向迭代中,在计算分类概率时,将小批量样本与所有标识进行比较。在训练再识别网络时,这种损失函数比softmax更有效。

数据集

我们在三个常用的基于视频的人再识别数据集:PRID2011[15]、iLIDS-VID[40]和MARS[48]上评估了所提出的算法。

PRID2011包括来自两个相机视图的个人视频,分别包含385和749个身份。只有前200人出现在这两个相机中。

每个图像序列的长度从5帧变化到675帧。ILIDSVD由300个受试者的600个图像序列组成。

对于每个人,我们有两个视频,序列长度从23帧到192帧,平均持续时间为73帧。

MARS数据集是最大的基于视频的人再识别基准,具有1261个身份和大约20000个由DPM检测器[10]和GMMCP跟踪器[7]生成的视频序列。

每个身份由至少2个摄像机捕获,平均有13.2个序列。数据集中有3248个分心序列。

对于PRID2011和ILIDVID数据集,我们遵循来自[40]的评估协议。

数据集被随机分割成探针/库身份。此过程重复10次,用于计算平均精度。

对于MARS数据集,我们遵循[48]提供的原始分割,它使用预定义的631标识进行培训,其余标识进行测试。

结果

表1。所提出的方法的成分分析:rank-1精度报告。 对于MARS数据集,我们提供括号内的地图。 SpaAtn是多区域空间注意,Q’和Q是两个正则化项,Max池和TemAtn分别是最大时态池和所提出的时间注意。 Ind表示独立地将整个网络细化到每个数据集。

                     

表2。rank-1精度采用不同数量k的不同空间注意力模型。

                                                       

表3。比较我们提出的方法最先进的PRID2011,ILIDS- VID,和MARS数据集。 rank-1精度报告针对MARS数据集,其中我们提供mAP在括号内。 最好的和第二个最好的结果分别是红色和蓝色的标记。

                

总结

成功的基于视频的人身份验证的关键挑战是开发每个视频的潜在特征表示作为进行比较的基础。

在这项工作中,我们提出了一种新的时空注意机制,以实现更好的视频表示。

我们不是每帧提取单个特征向量,而是利用一组不同的空间注意模型在多幅图像中一致地提取相似的局部补丁(图3)。

这种方法自动解决了视频识别中的两个常见问题:跨帧对齐对应的图像块(由于身体姿势、相对于相机的方向等改变)并确定身体的特定部分是否被遮挡

为了避免学习冗余空间注意力模型,我们采用基于HELLIGER距离的多样性正则化项。

这鼓励网络发现一组空间注意力模型,这些模型在为每个图像生成的接收字段之间具有最小的重叠。

虽然多样性规则化不是一个新课题,但我们是第一个学习视频序列的多样化空间注意力模型的人,并且说明了Hellinger距离对于此任务的重要性。

(我们的实验说明了在文本嵌入中如何使用多样性规则化项对图像不太有效)。

最后,使用时间注意力在每个空间注意力模型的基础上聚集跨帧的特征,例如组合来自面部区域的所有特征。

这允许网络基于视频中最相关的图像区域来表示每个发现的身体部分。 我们在三个数据集上评估了我们提出的方法,并且执行了一系列实验来分析每个组件的影响。

我们的方法大大优于状态方法,这证明了它在基于视频的人再识别中的有效性。

本文同步分享在 博客“悲恋花丶无心之人”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

django.template.exceptions.TemplateDoesNotExist: login.html 错误处理

django.template.exceptions.TemplateDoesNotExist: login.html 错误处理

 

登陆 Login 界面时候报错

Internal Server Error: /login/
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/usr/local/python3/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/python3/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/python/project/MyCrazyeyes/web/views.py", line 45, in login
    return render(request, ''login.html'')
  File "/usr/local/python3/lib/python3.6/site-packages/django/shortcuts.py", line 36, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/usr/local/python3/lib/python3.6/site-packages/django/template/loader.py", line 61, in render_to_string
    template = get_template(template_name, using=using)
  File "/usr/local/python3/lib/python3.6/site-packages/django/template/loader.py", line 19, in get_template
    raise TemplateDoesNotExist(template_name, chain=chain)
django.template.exceptions.TemplateDoesNotExist: login.html
[03/Feb/2018 07:39:49] "GET /login/?next=/ HTTP/1.1" 500 76432

 

在 setting.py 下 DIRS 如下所示

TEMPLATES = [
    {
        ''BACKEND'': ''django.template.backends.django.DjangoTemplates'',
        ''DIRS'': [],
        ''APP_DIRS'': True,
        ''OPTIONS'': {
            ''context_processors'': [
                ''django.template.context_processors.debug'',
                ''django.template.context_processors.request'',
                ''django.contrib.auth.context_processors.auth'',
                ''django.contrib.messages.context_processors.messages'',
            ],
        },
    },
]

 

在 setting.py 重新设置下 DIRS 如下所示,则问题解决

TEMPLATES = [
    {
        ''BACKEND'': ''django.template.backends.django.DjangoTemplates'',
#        ''DIRS'': [],
        ''DIRS'': ["%s/%s" %(BASE_DIR,''templates''),],
        ''APP_DIRS'': True,
        ''OPTIONS'': {
            ''context_processors'': [
                ''django.template.context_processors.debug'',
                ''django.template.context_processors.request'',
                ''django.contrib.auth.context_processors.auth'',
                ''django.contrib.messages.context_processors.messages'',
            ],
        },
    },
]

 

另外需要确保 templates 目录下确实是有 login.html 文件

[python@qinhan templates]$ pwd
/home/python/project/MyCrazyeyes/templates
[python@qinhan templates]$ ls
login.html
[python@qinhan templates]$ 

 

django.template.exceptions.TemplateDoesNotExist: rest_framework/api.html 报错

django.template.exceptions.TemplateDoesNotExist: rest_framework/api.html 报错

django.template.exceptions.TemplateDoesNotExist: rest_framework/api.html 报错,
我在使用 postman 进行提交请求是能正常调用的,但是使用浏览器就会抛出这个错误
在这里插入图片描述
这是因为我们没在 settings 中的 app 中注册我们的 rest_framework 导致的。
只需在

INSTALLED_APPS = [
    ''django.contrib.admin'',
    ''django.contrib.auth'',
    ''django.contrib.contenttypes'',
    ''django.contrib.sessions'',
    ''django.contrib.messages'',
    ''django.contrib.staticfiles'',
    ''app01.apps.App01Config'',
    ''rest_framework'',
]

注册一下即可正常访问了。

今天的关于REDISTEMPLATE 如何注入到 VALUEOPERATIONSredistemplate怎么注入的分享已经结束,谢谢您的关注,如果想了解更多关于compilation.mainTemplate.applyPluginsWaterfall is not a function、Diversity Regularized Spatiotemporal Attention for Video-based Person Re-identification 翻译、django.template.exceptions.TemplateDoesNotExist: login.html 错误处理、django.template.exceptions.TemplateDoesNotExist: rest_framework/api.html 报错的相关知识,请在本站进行查询。

本文标签: