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 から実験フォルダーを追加し、設定ファイルを使用して別のインストールアプリとして公開しました。そのため、別のアプリケーションのように見えます。

私は 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
4

1 に答える 1