2015-11-03 39 views
0

在我小小的Django webapp中,我有4或5個views/pages。我在每個函數中添加了身份驗證,前綴爲@login_required()jinja var不會傳遞給模板

在所有頁面上,我可以用Jinja2顯示user.username變量。

但是,只有在一個頁面上(displaystats.html),用戶變量找不到或空...

這是我的觀點:

@login_required() 
def displaystats(request): 
    try: 
     listpackages = Packages.objects.all().order_by('-id') 
    except: 
     listpackages = None 

    try: 
     listprojects = Projects.objects.all() 
    except Projects.DoesNotExist: 
     listprojects = None 

return render_to_response('displaystats.html', {'listpackages': listpackages}) 

模板很簡單: - displaystats。 HTML

<!DOCTYPE html> 
<html> 
    <!-- Head --> 
    {% include 'head.html' %} 
    <body> 
    <!-- Navbar --> 
    {% with "Dynamic Packages Statistics" as namepage %} 
     {% include 'navbar.html' %} 
    {% endwith %} 
... 
... 

navbar.html:

<!-- Navbar --> 
<nav class="navbar navbar-default navbar-static-top" role="navigation"> 
    <a class="navbar-brand" href="{% url 'webgui.views.homepage' %}"> MyAPP </a> <p class="navbar-text">{{ namepage }}</p> 

{% if user %} 
    <p class="btn btn-default navbar-btn pull-right" style="margin-right:15px;"> Welcome, {{ user.username }} </p> 
    <a href="{% url 'logout' %}" class="btn btn-danger navbar-btn pull-right" style="margin-right:15px;"><span class="glyphicon glyphicon-log-out"> Logout </span></a> 
{% else %} 
    <p class="btn navbar-btn pull-right" style="margin-right:15px;"> Welcome, you're unlogged </p> 
{% endif %} 

我想評論一些行(HTML,改變Jinja2的「如果」,......),但displaystats.html頁面不知道「用戶」變量,我不明白爲什麼。

回答

1

這與login_required修飾符或jinja2沒有任何關係,問題在於您的看法。您應該使用render快捷鍵代替render_to_response

from django.shortcuts import render 

@login_required() 
def displaystats(request): 
    ... 
    return render(request, 'displaystats.html', {'listpackages': listpackages}) 

當您使用render_to_response你必須明確地使用RequestContext使得AUTH背景處理器上,它包括在模板背景userrender快捷方式自動執行。

+0

哦,是的,它適用於'render'。並感謝您的解釋,這可能會有所幫助:) – Isador