我无法确定问题出在哪里。
本质上我试图通过渲染将一个Context(一个映射到Game对象列表的命名键的字典)传递给一个html片段。列表中的每个游戏都是Game类,它具有单个char状态字段。我有一个' for'循环游戏列表所以我试图使用' if'用于访问状态并相应显示消息的标记。渲染代码段时出现问题,并给我一个错误:TemplateSyntaxError at /user/home
Could not parse the remainder: '==' from 'game.status=='
我认为这与尝试访问Game的状态属性有关。 以下是该类的一些代码:
class Game(models.Model):
first_player = models.ForeignKey(User, related_name="games_first_player")
second_player = models.ForeignKey(User, related_name="games_second_player")
next_to_move = models.ForeignKey(User, related_name="games_to_move")
start_time = models.DateTimeField(auto_now_add=True)
last_active = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=1, default="A", choices=GAME_STATUS_CHOICES)
objects = GamesManager()
这是生成列表并将其传递给渲染的视图
def home(request):
my_games = Game.objects.games_for_user(request.user)
active_games = my_games.filter(status="A")
finished_games = my_games.exclude(status="A")
waiting_games = active_games.filter(next_to_move=request.user)
other_games = active_games.exclude(next_to_move=request.user)
context = Context({'other_games': other_games,
'waiting_games': waiting_games,
'finished_games': finished_games})
return render(request, 'user/home.html', context)
以下是user / home.html
的相关部分 <h3> Here is your current overview:</h3>
{% block content %}
<div class="well col-md-6">
{% include "tictactoe/game_list_snippet.html" with header="Games Awaiting Your Move" games_list=waiting_games %}
{% include "tictactoe/game_list_snippet.html" with header="Waiting Games" games_list=other_games %}
{% include "tictactoe/game_list_snippet.html" with header="Finished Games" games_list=finished_games %}
</div>
{% endblock content %}
最后这里是片段
<div class="list-group">
{% for game in games_list %}
<a class="list-group-item" href="#">
{{ game }}:
{% if game.status == "A" %}
{% if game.next_to_move == user %}Your Turn{% else %} Waiting for opponents turn {% endif %}
{% elif game.status== "D" %}
Draw
{% elif game.status== "F" and user == game.first_player %}
You Won!
{% elif game.status== "S" and user == game.second_player %}
You Won!
{% else %}
You Lost.
{% endif %}
<span class='badge'>{{game.move_set_count}}</span></a>
{% empty %}
<span class="list-group-item">No Games Available.</span>
{% endfor %}
为了充分披露,我通过关于Pluralsight的django课程获得了大部分代码。不幸的是他正在使用django 1.5而且我有1.9,这不是第一次出现弃用/添加/更改问题,但这是我第一次找不到答案文档或这里。我很确定问题出现在{%if%}标记的模板逻辑中,因为如果我将其删除,{%for%}循环就会起作用,页面会显示正确的游戏列表。我意识到这个帖子很长,我只想说这里的任何/所有帮助都会非常感激。非常感谢![/ p>
答案 0 :(得分:5)
Django模板中的一些语句看起来像Python,但Django实际上实现了自己的解析逻辑,这与Python完全不同。在这种情况下,它无法解析未与您所比较的空格分隔的==
条件。因此game.status==
只需要game.status ==