2012-05-20 50 views
0

在我的Django視圖中,當我嘗試將變量分配給我的上下文變量時,它不起作用。我基本上從請求中獲取數據,根據請求執行搜索,並將該搜索結果分配給我的上下文。這裏是我的view.py: EDIT2無法發送上下文變量到Django中的模板

def home(request): 
    GET = request.GET 
    utilisateur = "" 
    context = {} 
    if GET.has_key('name'): 
     me = UserProfile.objects.filter(facebookId=GET[u'name']) 
     utilisateur = me[0].facebookId 
     print utilisateur 
     context.update({"nom":str(utilisateur)}) 
     print context.get("nom")  
     return render_to_response('home.html',context) 
    else: 
     print "Request doenst have a Name variable" 
     return render_to_response("home.html",context, 
      context_instance=RequestContext(request)) 

現在,即使我與一些替代var變,我仍然無法將其發送到模板,通過上下文,但我仍然可以看到從它的價值控制檯(注意print var行)

我在這裏做錯了什麼嗎? * 編輯*

我home.html的文件:

<!DOCTYPE html> 
<html> 
<head> 
<title>Welcome</title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script> 
</head> 
<body> 

<div id="fb-root"></div> 
<script> 
var username = ""; 
$(document).ready(function(){ 

    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document)); 

    // Init the SDK upon load 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '302210766529054', // App ID 
     channelUrl : '//'+window.location.hostname+'/channel', // Path to your Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
    }); 

    // listen for and handle auth.statusChange events 
    FB.Event.subscribe('auth.statusChange', function(response) { 
     if (response.authResponse) { 
     // user has auth'd your app and is logged into Facebook 
     FB.api('/me', function(me){ 
      if (me.username) { 
      document.getElementById('auth-displayname').innerHTML = me.name; 
      username = me.username; 
      document.getElementById('picture').innerHTML = "<img src = 'https://graph.facebook.com/"+me.username+"/picture'>"; 
      xmlhttp = new XMLHttpRequest(); 
      xmlhttp.open('GET','?name='+me.username, true); 
      xmlhttp.send(); 
      } 
     }) 
     document.getElementById('auth-loggedout').style.display = 'none'; 
     document.getElementById('auth-loggedin').style.display = 'block'; 
     } else { 
     // user has not auth'd your app, or is not logged into Facebook 
     document.getElementById('auth-loggedout').style.display = 'block'; 
     document.getElementById('auth-loggedin').style.display = 'none'; 
     } 
    }); 

    // respond to clicks on the login and logout links 
    document.getElementById('auth-loginlink').addEventListener('click', function(){ 
     FB.login(); 
    }); 
    document.getElementById('auth-logoutlink').addEventListener('click', function(){ 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.open('GET','?name='+username+'&logout=True', true); 
     xmlhttp.send(); 
     FB.logout(); 
    }); 
    } 

    } 
); 
</script> 

<h1>Skèmpi:Rediscover your heritage</h1> 
    <div id="auth-status"> 
    <div id="auth-loggedout"> 
     <a href="#" id="auth-loginlink">Login</a> 
    </div> 
    <div id="auth-loggedin" style="display:none"> 
    <div id="picture"></div> 
     Hi, <span id="auth-displayname"></span> 
    (<a href="#" id="auth-logoutlink">logout</a>) 
    {{ nom }} 


    </div> 
</div> 

編輯3

Quit the server with CONTROL-C. 
[21/May/2012 01:10:35] "GET /skempi/home HTTP/1.1" 301 0 
Request doesn't have a Name variable 
[21/May/2012 01:10:35] "GET /skempi/home/ HTTP/1.1" 200 3179 
dontshare 
[21/May/2012 01:10:35] "GET /skempi/home/?name=dontshare HTTP/1.1" 200 3188 
+0

向我們顯示''home.html'' – seler

+1

另外,''context''字典沒有被髮送到模板,只是''{「username」:var}''。 – seler

+0

我現在編輯過,仍然是同樣的事情。在我的home.html中,我只是在某處(其他基本上是JavaScript SDK初始化等),我應該發佈它嗎? –

回答

0

因此,似乎有可能是一些事情去這裏。

您是否驗證過settings.TEMPLATE_DIRS設置正確並且home.html模板實際上正在渲染?要驗證這一點,當您嘗試在Web瀏覽器中加載頁面時,SDK樣板是否會出現?

我假設你打的是正確的網址 - http://127.0.0.1:8000/?name=Mohamed。那是對的嗎?

最後,print聲明是否返回任何內容 - 也就是說,您是否收到來自UserProfile查詢的響應?

驗證了所有這些內容後,您正在使用的上下文變量名稱之間存在一些混淆。在views.py中,您設置上下文變量temp,但在模板home.html中嘗試輸出上下文變量nom。這就是我有可能實現的觀點:

def home(request): 
    context = {} 
    if 'name' in request.GET: 
     me = UserProfile.objects.filter(facebookId=request.GET[u'name']) 
     context['nom'] = str(me[0].facebookId) 
     print context['nom'] # if you really want see what's been stored 
    else: 
     print "Request doesn't have a Name variable" 

    return render_to_response("home.html", context, 
     context_instance=RequestContext(request)) 

則所呈現的頁面應該顯示返回,只要您有地方{{ nom }} Facebook的ID。

+0

它沒有工作,我認爲這是因爲你提到的URL的東西。再次檢查原始帖子(編輯3),當我嘗試你的代碼(和我的代碼實際上是相同的)時,看看我在控制檯中得到了什麼。我想這可能會說很多。也許我沒有正確實施AJAX? –

+0

當我通過手動向URL添加'?name = Mohamed'來訪問頁面時,所有內容都可以按需使用。但是,當我刷新頁面時,它不起作用。 –

+0

是的,'?name = Mohamed'是我們發佈的視圖的第3行和第4行訪問的URL的GET參數部分。刷新時,仍然是URL的一部分,請更正? – jnovinger