我正在开发一个基于开源的项目。这是电话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
答案 0 :(得分:0)
尝试在运行服务器之前进行迁移。