Django 1.9 TemplateSyntaxError无法解析余数:' =='来自' game.status =='

时间:2016-02-23 00:01:42

标签: python django

我无法确定问题出在哪里。

本质上我试图通过渲染将一个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>

1 个答案:

答案 0 :(得分:5)

Django模板中的一些语句看起来像Python,但Django实际上实现了自己的解析逻辑,这与Python完全不同。在这种情况下,它无法解析未与您所比较的空格分隔的==条件。因此game.status==只需要game.status ==