我正在尝试将我的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)
如果你能帮助我,我会感激不尽。
答案 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()并再次将另一个上下文传递给模板。我不确定这个解决方案,可能还有另一种方法可以做得更好......