【问题标题】:TemplateSyntaxError Could not parse the remainder: '' from 'form.filter()'TemplateSyntaxError 无法解析剩余部分:''来自'form.filter()'
【发布时间】:2017-04-20 22:39:43
【问题描述】:

我正在尝试将我的查询集的一些值放入 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中打印的queryset的值如下: 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)

如果你能帮助我,我将不胜感激。

【问题讨论】:

    标签: python django django-models django-views


    【解决方案1】:

    Django 默认模板引擎不允许在模板内进行这种操作。这样做的推荐方法是在上下文中添加一个上下文变量以及该查询集的结果,并在模板的 forloop 中使用该变量。比如:

    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

    【讨论】:

    • 您评论我使用学位的另一种方式是正确的,但在模板中我无法使用它,在答案中我解释了问题。
    【解决方案2】:

    是的,我理解您向我解释的解决方案,但我需要过滤取决于您选择的大学的学位。由于这个原因,我将视图中的所有对象传递给可以按照我的喜好处理数据库,我不知道在 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() 并将另一个上下文再次传递给模板。我不确定这个解决方案,可能还有另一种方法可以做得更好..

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 2018-03-31
      • 2011-07-11
      • 2015-03-06
      • 2016-06-04
      • 2021-12-20
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多