私はオープンソースに基づくプロジェクトに取り組んでいます。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 から実験フォルダーを追加し、設定ファイルを使用して別のインストールアプリとして公開しました。そのため、別のアプリケーションのように見えます。
私は experiment.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 テンプレート モードでテンプレート コードを記述しているようです。これは問題になる可能性がありますか?その場合、どうすればこれをジンジャに変換できますか。そうでない場合、ここで何が欠けていますか?
私の知る限り、ブログ投稿を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