jinja var 未传递给模板
jinja var not passed to template
在我的微型 Django 网络应用程序中,我有 4 或 5 个 views/pages。我在每个函数上添加了身份验证,并在其前面加上 @login_required()
前缀。
在所有页面上,我都可以使用 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 'if',...)但是 displaystats.html 页面不知道 'user' 变量我不明白为什么。
这与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
以便身份验证上下文处理器运行并在模板上下文中包含 user
。 render
快捷方式会自动完成。
在我的微型 Django 网络应用程序中,我有 4 或 5 个 views/pages。我在每个函数上添加了身份验证,并在其前面加上 @login_required()
前缀。
在所有页面上,我都可以使用 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 'if',...)但是 displaystats.html 页面不知道 'user' 变量我不明白为什么。
这与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
以便身份验证上下文处理器运行并在模板上下文中包含 user
。 render
快捷方式会自动完成。