2011-04-01 18 views
0

好的原諒我,如果這是一個noddy問題,但我無法找到一個例子在線。我是從Codeigniter轉換到Django的PHP開發人員。我打電話給我這樣做的模特;Django開發 - 如何正確訪問模型結果

if request.method == 'GET': 
    for e in Ratecard.objects.filter(reportSuite=region): 
     suite = e.reportSuite 
     RP_UniqueUsers = e.RP_UniqueUsers 
     RP_PageImpressions = e.RP_PageImpressions 
     RP_TimeSpent = e.RP_TimeSpent 
     RP_PageViewPerVisit = e.RP_PageViewPerVisit 
     HP_PageImpressions = e.HP_PageImpressions 
     HP_UniqueUsers = e.HP_UniqueUsers 
     HP_TimeSpent = e.HP_TimeSpents 



return render_to_response('rates.html', locals()) 

在此示例中,'region'從GET參數設置。我的問題是,如果我然後嘗試從我的模板訪問套件,我什麼也沒有得到它。 {{region}}不打印任何結果。

在視圖和模板中訪問這些數據的正確方法是什麼?

回答

2

默認情況下,您的本地視圖變量爲而不是可見於您的模板中。你必須在上下文字典中明確地傳遞它們。通常你會在render_to_response中這樣做。

實施例:

def index(request): 
    # a local variable 
    region = "sanriku" 

    # render_to_response takes a template file name as the first argument 
    # and optionally some more parameters, such as a context dictionary, 
    # that holds your variables, which will be accessible in this view. 
    # Here, e.g. the variable {{ region }} will be accessible and will print 
    # just "sanriku". 
    return render_to_response("index.html", {"region" : region}) 

的Django 1.3引入了一個新的快捷方式render

渲染()是相同的調用render_to_response()這個與強制使用的一個context_instance參數的RequestContext。

的快捷方式將任何GET請求參數是:

{{ request.GET.q }} 

,如果你啓用了request context processor

只是爲了開發目的:如果你想節省開發過程中的一些按鍵,你可以通過locals()功能,返回來表示當前本地符號表字典一次添加所有局部變量。所以最密集的方式來訪問你的模板以及所有數據的RequestContext包含所有局部變量,你可以寫:

# Django 1.3 
return render("template.html", **locals()) 

# Pre Django 1.3 
return render("template.html", **locals(), 
    context_instance=RequestContext(request)) 
+0

是啊,我已經想通了,很多至今 與更新我目前的代碼,但我沒有得到任何變數...... – Matthew 2011-04-01 16:06:43

+0

好吧,看起來你並沒有將區域當作'獨立'變量。您是否在視圖中嘗試過{{request.GET.region}}?如果您有一個請求上下文處理器啓用(請參閱上面的編輯),請求對象在模板中可用。 – miku 2011-04-01 16:34:04

+0

很抱歉,在模板中訪問它只是次要問題。我想知道的是我正確地在for循環中設置變量?並有一個簡單的調試方法,我可以使用?像在PHP var_dump()? – Matthew 2011-04-04 08:59:35