2011-12-24 109 views
0

在我看來,文件請求變量呈現

def user_detail(request, username, 
    template_name='auth/user_detail.html', extra_context=None): 
    context = { 
     'user': shortcuts.get_object_or_404(User, username=username) 
    } 
    context.update(extra_context or {}) 
    return shortcuts.render(request, template_name, context) 

和我的模板的一部分的部分,下面是

<ul class="nav"> 
    {% if request.user.username != 'steve' %} 
    <li> 
     <a href="{% url 'user_detail' 'steve' %}">Steve</a> 
    </li> 
    {% endif %} 
    {% if request.user.username != 'james' %} 
    <li> 
     <a href="{% url 'user_detail' 'james' %}">James</a> 
    </li> 
    {% endif %} 
</ul> 

不過即使我登錄使用或者這些用戶中,我仍然顯示此鏈接。這是因爲我正在檢查request.user.username,並且請求變量沒有被渲染函數傳遞給模板。

如果我直接引用user.username,那麼它很好,但這不是我想要解決這個問題,因爲還有其他類似的視圖,返回這個我必須使用的變量request

這是yourlabs forkdjango-subscription的全部內容。我之前沒有使用render shortcut,所以我不知道爲什麼我得到這個錯誤。

任何幫助將深受讚賞。

回答

2

所有render確保模板呈現爲RequestContext。這反過來就意味着上下文處理器正在運行。

request上下文處理器是not enabled by default。如果需要,您必須自行將其添加到settings.CONTEXT_PROCESSORS。然而,在你的情況下,你並不需要它,因爲你只是對用戶感興趣 - 而auth processor提供這個變量作爲user變量。

因此,總而言之,將request.user改爲user,一切都會好起來的。

+0

感謝您的信息....但正如我上面寫的這只是一個特殊的例子...我知道我可以直接訪問'用戶',但我需要訪問這個'請求上下文處理器在其他模板以及。非常感謝您的幫助。 – Sachin 2011-12-25 06:33:01