【问题标题】:jinja var not passed to templatejinja var 未传递给模板
【发布时间】:2015-11-03 10:51:32
【问题描述】:

在我的小型 Django webapp 中,我有 4 或 5 个视图/页面。我在每个函数上添加了身份验证,并在其前面加上 @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' 变量,我不明白为什么。

【问题讨论】:

    标签: django jinja2 login-required


    【解决方案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,以便身份验证上下文处理器运行并在模板上下文中包含userrender 快捷方式会自动完成。

    【讨论】:

    • 哦,是的,它适用于 render 。感谢您的解释,这可能会有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2014-12-17
    • 2021-03-28
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多