django-lean:引入新的模板标签

时间:2014-01-15 16:17:23

标签: django jinja2 django-templates django-lean

我正在开发一个基于开源的项目。这是电话askbot。我想给它添加一个/ b测试,经过一些研究后我发现了django-lean。我不是django的专家,但我设法将django-lean的条带版本带到我的askbot-dlevel版本。我使用了blog post。但我的问题是我收到了以下错误:

TemplateSyntaxError at /questions/
Encountered unknown tag 'experiment'.
Request Method: GET
Request URL:    http://localhost:8001/questions/
Django Version: 1.4.10
Exception Type: TemplateSyntaxError
Exception Value:    
Encountered unknown tag 'experiment'.

只是为了提供更多关于如何合并django-lean的信息:正如博客文章提到的那样我只使用实验模块:

我在askbot文件夹中添加了django-lean的实验文件夹,并使用设置文件将其公开为另一个install-app。所以现在它看起来像另一个应用程序。

我将experiments.py和smartif.py复制到askbot-dlevel / templatetags,因为根据他django documentation这是正确的做法:

在askbot-dlevel中有一个utils文件夹,并且有decorators.py,我添加了以下内容:

def set_experiment_user(view_func):
    '''Decorator for setting the WebUser for use with ab split testing assumes
    first argument is the request object'''
    @functools.wraps(view_func)
    def decorator(request, *args, **kwargs):
        WebUser(request).confirm_human()
        return view_func(request, *args, **kwargs)
    return decorator

现在正如博客文章中提到的那样,我在视图中添加了以下内容:

@csrf.csrf_protect
@decorators.set_experiment_user
def ask_widget(request, widget_id):

    def post_question(data, request):
        thread = models.Thread.objects.create_new(**data)
        question = thread._question_post()
        request.session['widget_question_url'] = question.get_absolute_url()
        return question

    widget = get_object_or_404(models.AskWidget, id=widget_id)
    ...

在我的模板中,就像博客文章中提到的那样,我做了以下内容:

在模板中,我完成了以下操作:

{% import "macros.html" as macros %}

{% load experiments %}
{% experiment experiment_name top_contributors %}
{% if contributors and settings.SIDEBAR_MAIN_SHOW_AVATARS %}
    {% include "widgets/contributors.html" %}
{% endif %}
{% endexperiments %}
正如博客文章中提到的那样,事情应该有效。使用我创建和实验的管理控制台,实验的名称是top_contributors。如果事情发生,所有用户都将参与实验。但我得到上面提到的错误,告诉我模板标签尚未注册。

askbot-dlevel项目使用jinja2(我认为),但看起来像blog-post已经在常规django模板模式中编写了它的模板代码。这可能是个问题吗?如果是这样的话,我该如何将其转换为jinja。如果不是我在这里错过了什么?

据我所知,我试图将写入jinja2的博客文章转换为:

{% if experiments.experiment('top_contributors') %}
{% if contributors and settings.SIDEBAR_MAIN_SHOW_AVATARS %}
    {% include "widgets/contributors.html" %}
{% endif %}
{% endif %}

在此之后我收到以下错误:

UndefinedError at /questions/
'experiments' is undefined
Request Method: GET
Request URL:    http://localhost:8001/questions/
Django Version: 1.4.10
Exception Type: UndefinedError
Exception Value:    
'experiments' is undefined
Exception Location: ..python2.7/site-packages/Jinja2-2.7.1-py2.7.egg/jinja2/environment.py in getattr, line 397
Python Executable:  ../ABFrameWork/bin/python

1 个答案:

答案 0 :(得分:0)

尝试在运行服务器之前进行迁移。