2016-12-05 12 views
3

私は、ユーザーがどの地域から来ているのかによって内容が異なるウェブサイトを構築しています。私はクッキーが設定されていない場合は、サイト上のときに、ユーザーの土地をポップアップ表示するjQueryの/ブートストラップを使用してモーダルウィンドウを設定している:Django/Wagtailのクッキーを取得してPython変数を設定する方法

base.html

<script type="text/javascript"> 
    $(document).ready(function() { 
    if (Cookies.get('province') == null) { 
    $('#provinceModal').modal('show'); 
    } 

    $('button#ontario').click(function() { 
     Cookies.set('province', 'ontario'); 
     $('#provinceModal').modal('hide'); 
    }); 
    $('button#alberta').click(function() { 
     Cookies.set('province', 'alberta'); 
     $('#provinceModal').modal('hide'); 
    }); 
    $('button#quebec').click(function() { 
     Cookies.set('province', 'quebec'); 
     $('#provinceModal').modal('hide'); 
    }); 
    }); 
</script> 

クッキーが正しく設定されていますボタンの1つがクリックされた後でブラウザに表示されます。私が抱えている問題は、Pythonを使ってクッキーを取得することです。私はprovince変数を保存し、if文を使用して特定のコンテンツを表示したい(どの州が等しいかに応じて)。

私はこれを試してみたと私はコンソールにクッキーを印刷することができる午前:

cookies.py

import Cookie 
import os 
import requests 


def get_cookies(): 
    s = requests.session() 
    r = s.get("http://www.twitter.com") 

    cookie = r.cookies['_twitter_sess'] 

    return cookie 

私はあることをPythonで変数にこの値を渡すにはどうすればよいですテンプレートで使用されていますか?私は次に何をすべきかわからない。私は何が欠けていますか?

答えて

0

テンプレートタグを使用して私の問題を解決しました。

@register.simple_tag(takes_context = True) 
def get_cookies(context, value1, value2): 
    request = context['request'] 
    result = request.COOKIES.get('province', '') 
    return result 

私は州Cookieの値をこのように見つけて、そのように私のテンプレートでそれを使用することができる午前:

{% if request.COOKIES.province == 'ontario' %} 
    <li><a href="#">Link</a></li> 
{% endif %} 

これは私が探していますの機能を実現する最も簡単な方法のようです。

4

HttpRequestオブジェクトで設定されたdjangoモジュールではなく、Python Cookieモジュールを使用しています(detailed in this answer)。

あなたのビューでは、そのJQueryポップアップのバックエンドを処理しています(おそらく、あなたをDjangoのエンドポイントに送信していて、そのコードはビューのスニペットです)。 request.sessionのドキュメントを使用して、Cookieの状態を確認して設定してください。 Djangoのビューで

は、例えば、それは次のようになります。

def a_standard_view(request): 
    print request.session 

あなたはクッキーの設定がうまく再生されているかどうかを確認するために行くことができ、再び(使用することにより、これをセクションで私はもともとリンクされていました):django.httpのインポートから

のHttpResponse django.shortcutsインポートから、あなたの特定のインスタンスで

def faux_login(request): 
    if request.method == 'POST': 
     if request.session.test_cookie_worked(): 
      request.session.delete_test_cookie() 
      return HttpResponse("You're logged in.") 
     else: 
      return HttpResponse("Please enable cookies and try again.") 
    request.session.set_test_cookie() 
    return render(request, 'foo/login_form.html') 

をレンダリングし、あなたが必要となりますあなたのjqueryを処理するエンドポイント(so/ajax/province /など)。あなたのJqueryは、あなたのセッションデータに保存しようとしている細部を持って、get call to hit that endpoinを使用する必要があります。

+0

私は最新の要求をrequests.sessionを使って含めるように質問を更新しました。私はtwitter.comからクッキーを入手することができます(ただし、localhostから取得するのに問題はありますが、問題があるかもしれません)。私はコンソールにクッキーを印刷することができますが、私はそれをテンプレート内の変数として使用できるように、Pythonに渡す方法がわかりません。助けて? – Kim

+0

*を設定したCookie *を使用しようとしていますか?*別のサイトがあなたのマシンに設定されているCookieを取得しようとしていますか?あなたの質問は前者を示していますが、あなたは後者について質問しています。 – Withnail

+0

私は最終的に上記のjQueryコードでブラウザに設定したクッキーを取得しようとしています。私はそれを取得することができませんし、それがローカルホストではうまく動作しない可能性があることを読んでいます。私はTwitterからクッキーを取得することができたので、私は正しいと思います* – Kim

関連する問題