4
# views.py
def like(request,option="food",restaurant = 1):
    if request.is_ajax:
        like = '%s_like' % str(option)
        if 'restaurants' in request.session:
            if restaurant not in request.session['restaurants']:
                request.session['restaurants'][restaurant] = {}
            x = request.session['restaurants'][restaurant].get(str(like),False)
            if x:
                return HttpResponse(False)
            else:
                request.session['restaurants'][restaurant][str(like)] = True
                request.session.modified = True

        else:
            request.session['restaurants'] = {}
        request.session.modified = True

context_instance = RequestContext(request)応答のレンダリング中にセッション変数を使用できるように使用しています。私のテンプレート:

{% if request.session.restaurants.rest.id.food_like %}
working
{% else %}
    failed
{% endif %}

私のビューセッションキーは次のようになります:

request.session["restaurants"][restaurant][like] = True

ここrestaurantでレストランIDはどこにあり、likeは "" food_like "、" service_like "、"special_like"のいずれかになります。

では、テンプレートでどのようにアクセスするのですか?たとえば、私が使用する場合

request.session.restaurants.rest.id.food_like 

それは確かに機能しません。

4

2 に答える 2

9

あなたはあなたのに持っていないかもしれませdjango.core.context_processors.requestsettings.TEMPLATE_CONTEXT_PROCESSORS

テンプレートに印刷{{ request }}してみてください。何も表示されない場合は、テンプレートがありません。

./manage.pyシェルで確認することもできます。

from django.conf import settings
print settings.TEMPLATE_CONTEXT_PROCESSORS

存在しない場合は、シェル出力からsettings.pyにdjango.core.context_processors.requestコピーして、このリストに追加します。TEMPLATE_CONTEXT_PROCESSORSdjango.core.context_processors.request

于 2012-08-23T17:22:01.543 に答える
4

@jpic応答を補完します。
シェルからコンテンツTEMPLATE_CONTEXT_PROCESSORSをコピーする代わりに、次の操作を実行できます。

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    "django.core.context_processors.request",
)

このようにして、グローバル設定が保持されます。
Pythonがこれをタプルとして扱うことができるように、末尾のコンマを必ず保持してください

于 2013-07-09T14:41:50.700 に答える