1

我正在开发一个基于开源的项目。它叫askbot。我想为其添加 a/b 测试,在做了一些研究后,我发现了django-lean。我不是 django 专家,但我设法将 django-lean 的精简版引入我的 askbot-dlevel 版本。我用了文。但我的问题是我收到以下错误:

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 的实验文件夹,并使用设置文件将其公开为另一个安装应用程序。所以现在它看起来像另一个应用程序。

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

在 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
4

1 回答 1

0

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

于 2018-08-10T05:55:55.007 回答