如果Django

时间:2015-09-29 21:03:40

标签: python html css django authentication

我正在尝试将模板标记/包含标记合并到我的侧边栏中。当我放置时,页面的主要部分会正确更新:

{% if user.is_authenticated %}
  <h1> Hello {{ user.username }}
{% else %}
  <h1> Hello </h1>
{% endif %}

当我尝试在我的模板标签/侧边栏中使用相同的原则时,它似乎忽略了user.is_authenticated并且总是显示'login'和'register',它应该只显示'logout'。

html的主体(主索引页):

{% load Kappa_extras %}
<body>
<div class="container-fluid">
  <div class="row">
    <div class="col-sm-2" id="side_section">
      {% block sidebar %}
        {% get_game_list %}
      {% endblock %}
    </div>


<!--Main section-->
    <div class="col-sm-10" id="main_section">
      {% block body %}
      {% endblock %}
    </div>
  </div>
</div>

来自'Kappa_extras'的get_game_list函数:

from django import template
from Kappa.models import Game, Game_Page
from django.contrib.auth.models import User

register = template.Library()

@register.inclusion_tag('Kappa/sidebar.html')
def get_game_list():
    return {'game_list': Game.objects.all()}

和'Kappa / sidebar.html':

<div id="side_default_list">
  <ul class="nav">
    <li><a href="{% url 'index' %}">Kappa</a></li>
    {% if user.is_authenticated %}
      <li><a href="{% url 'user_logout' %}">Log Out</a></li>
    {% else %}
      <li><a href="{% url 'user_login' %}">Log In</a></li>
      <li><a href="{% url 'register' %}">Register</a></li>
    {% endif %}

</div>

我检查了一些较旧的查询,但它们都没有正常工作。我尝试将请求放入def get_game_list(request)中:但它只是说没有收到参数的值。如何在user.is_authenticated时正确更新侧边栏?

1 个答案:

答案 0 :(得分:2)

您需要将用户传递给包含标记。

@register.inclusion_tag('Kappa/sidebar.html')
def get_game_list(user):
    return {'game_list': Game.objects.all(),  'user': user}

然后在您的模板中,使用

调用标记
{% get_game_list user %}

或者,您可以在包含标记中设置takes_context=True,以便您可以从模板上下文中访问用户。

@register.inclusion_tag('Kappa/sidebar.html', takes_context=True)
def get_game_list(context):
    return {'game_list': Game.objects.all(),  'user': context['user']}

在这种情况下,您不再需要将用户传递给模板标记。

{% get_game_list %}

有关更多信息和其他示例,请参阅the docs