TemplateSyntaxError无法解析余数:''from'sform.filter()'

时间:2017-04-20 22:39:44

标签: python django django-models django-views

我正在尝试将我的queryset的一些值放在html模板中。 这是我的HTML:

<ul class="dropdown-menu">
              {% for i in form.filter(university="UPF - Universitat Pompeu Fabra") %}
                <li ><a href="#">{{ i.degree }}</a></li>
                <li role="separator" class="divider"></li>
              {% endfor %}
            </ul>

但是当我对页面收费时,会发出此错误:

Exception Type: TemplateSyntaxError
Exception Value: Could not parse the remainder: '(university="UPF - Universitat Pompeu Fabra")' from 'form.filter(university="UPF - Universitat Pompeu Fabra")'

shell中打印的查询集的值如下: enter image description here

My views is the following one:

    from .models import Universitys

def index(request):
    universitys = Universitys.objects.all()
    context = {"form":universitys}
    return render(request,"index.html", context)

和模特:

class Universitys(models.Model):
 data = models.DateTimeField('date created', auto_now_add=True)
 university = models.CharField(max_length=50)
 degree = models.CharField(max_length=50)
 degreeMark = models.DecimalField(decimal_places=3,max_digits=5)

 def __str__(self):
    return '%s %s %f' % (self.university, self.degree, self.degreeMark)

如果你能帮助我,我会感激不尽。

2 个答案:

答案 0 :(得分:0)

Django默认模板引擎不允许在模板内进行此类操作。建议的方法是在上下文中使用该查询集的结果添加上下文变量,并在模板上使用该变量。 for循环。类似的东西:

def index(request):
    universities = Universities.objects.filter(university="UPF - Universitat Pompeu Fabra")
    context = {"universities": universities}
    return render(request, "index.html", context)

并在模板上:

   <ul class="dropdown-menu">
      {% for i in universities %}
        <li ><a href="#">{{ i.degree }}</a></li>
        <li role="separator" class="divider"></li>
      {% endfor %}
    </ul>

如果您只使用degree字段,则可以执行的另一件事是在查询集上仅获取此值。所以我也会将universities查询集更改为:

universities = Universities.objects.filter(university='UPF - Universitat Pompeu Fabra').values_list('degree', flat=True)

有关values_list的更多信息,请参阅docs

答案 1 :(得分:0)

是的,我理解您解释我的解决方案,但我需要筛选依赖于您选择的大学的学位。出于这个原因,我传递了视图中的所有对象,可以根据需要处理数据库,我不知道在django模板中实现这种操作是不可能的。

我再次解释我的问题,看看你是否看到其他解决方案。我传递了帖子中解释的模型,因为我正在为我的应用做一个下拉菜单或菜单选择,我需要过滤我从之前选择的大学中选择的学位。

模板如下:

<select id="font">
    {% for e in form %}
      <option>{{ e.university }}</option>
      <li role="separator" class="divider"></li>
    {% endfor %}
  </select>
  <select id="font">
    {% for i in form.filter(university="UPF - Universitat Pompeu Fabra") %}
      <option>{{ i.degree }}</option>
      <li role="separator" class="divider"></li>
    {% endfor %}
  </select>
  <p><label for="basic-url">2. Crea tu escenario en las PAU</label></p>

我认为一个可能的解决方案是首先使用大学的post方法,并且取决于选择,在视图中执行objects.filter()并再次将另一个上下文传递给模板。我不确定这个解决方案,可能还有另一种方法可以做得更好......