2016-02-23 33 views
0

我无法弄清楚问题出在哪里。Django 1.9 TemplateSyntaxError无法解析其余部分:'''from'game.status =='

本质上,我试图通过渲染将一个上下文(它是一个映射到Game对象列表的命名键字典)传递给html片段。列表中的每个游戏都是具有单个字符状态字段的Game类。我在游戏列表中有一个'for'循环所以我试图使用'if'标签来访问状态并相应地显示一条消息。渲染片段时出现问题,并给我一个错误:TemplateSyntaxError at /user/home Could not parse the remainder: '==' from 'game.status=='

我相信这与尝试访问游戏的状态属性有关。 下面是一些为类代码:

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) 

和这里是用户/ 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%}循环将起作用,并且页面会显示正确的游戏列表。我意识到这篇文章很长,我只想说这里的任何/所有帮助将不胜感激。提前感谢!

回答

3

Django模板中的一些语句看起来像Python,但是Django实际上实现了自己的解析逻辑,它并不像Python那样工作。在这种情况下,它不能解析==条件,该条件不与您正在比较的空间分隔。所以game.status==只需要game.status ==

+0

这工作。大声笑它是如此简单,我试着用其中一个陈述,但没有其余的和django调试器不断突出显示同一行......感谢很多tho mayne。 – user5965720

相关问题