2015-11-03 63 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