1

urls.py

(r'^(?P<restaurant>\d+)/like/(?P<option>\w+)$','like')

views.py

def like(request,option="food",restaurant = 1):
    if request.is_ajax:
        rest = 'rest'
        #option could be 'food' , 'service' , 'speciality'
        like = '%s_like' % str(option)

        if restaurant in request.session:
            if like not in request.session[restaurant]:
                request.session[restaurant][str(like)] =str(like)
                session = [item for item in request.session[restaurant]]
                return HttpResponse(session)
            else:
                session = [item for item in request.session[restaurant]]
                return HttpResponse(session)
        if restaurant not in request.session:

            request.session[restaurant] = {}

html

<a href="/{{rest.id}}/like/{{key|lower}}">
    <button  data-placement="left" data-original-title="{{val.0}} people like {{key|upper}} at {{rest|title}}" rel="tooltip" class="like pull-right pointer btn btn-info text-left pad0  btn-mini mrg-left5 like-food">
        <i class="icon-thumbs-up"></i>&nbsp;{{val.0}}
    </button></a>

ここでrest.id=1

疑い

「レストラン」キーを辞書として宣言したとき、「いいね」ボタンをクリックするとすべてのキーが返されない、たとえば「food_like」ボタンをクリックすると、1つのキーだけが返されるたびに理解できません。キーfood_likeを返しますが、すべてのfood_likeとサービスを返すのではなく、service_likeボタンをクリックすると、サービスを返すだけのように、助けてください。前もって感謝します

基本的に私が欲しいのは、例えば、ネストされたセッション辞書を作成することです。

request.session[restaurant][food][like]
request.session[restaurant][food][dislike] 
request.session[restaurant][service][like]
request.session[restaurant][service][dislike] 
4

1 に答える 1

1

提案:ルートセッションの辞書に動的ディクショナリの値はありません。管理しやすくするために、1つのレベルにネストします。見るrequest.session["restaurants"]

解決策:チェックアウト:https ://docs.djangoproject.com/en/dev/topics/http/sessions/#when-sessions-are-saved

request.session[restaurant][str(like)] = str(like)

セッションを変更しないため、デフォルトでは保存はトリガーされません。

あなたのオプションは、それが変更されたことをセッションに伝えることです

request.session.modified = True

または、リクエストごとにセッションを保存します:https ://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SESSION_SAVE_EVERY_REQUEST

SESSION_SAVE_EVERY_REQUEST = True
于 2012-08-23T15:33:29.213 に答える