我正在尝试将模板标记/包含标记合并到我的侧边栏中。当我放置时,页面的主要部分会正确更新:
{% 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时正确更新侧边栏?
答案 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。