我需要在基本模板中输入对模型类的引用。我可以从context_processor返回模型实例列表,但添加对类的引用会更优雅。
这是我的模板代码:
{% for langue in Langue.objects.all %}
<li><a href="{% url "ListeUEsParLangue" langue.code %}">{{ langue.label }}</a></li>
{% endfor %}
这里,我的context_processor代码:
def add_langue_object(request):
from ..baobab.models import Langue
return {'Langue': Langue}
我的错误信息: / 2016 / ue / 1896 /
中的AttributeErrorManager isn't accessible via Langue instances
Request Method: GET
Request URL: http://enseignements-2017.local:8000/2016/ue/1896/
Django Version: 1.9.2
Exception Type: AttributeError
Exception Value: Manager isn't accessible via Langue instances
Exception Location: /Users/xxxxxxxxxxxxx/.virtualenvs/enseignements-2017/lib/python2.7/site-packages/django/db/models/manager.py in __get__, line 250
我想在创建Context Django调用返回的类实例时。
有什么想法吗?
很多,
答案 0 :(得分:1)
问题是Django模板语言tries calling可以调用的任何变量。所以它有效地尝试Langue().objects.all()
,这给出了异常
就个人而言,我不同意将模型传递给模板而不是查询集更为优雅。我更愿意做以下事情。
from ..baobab.models import Langue
def add_langues (request):
return {'langues': Langue.objects.all()}
然后将模板更改为:
{% for langue in langues %}
答案 1 :(得分:0)
尝试:
{% for langue in Langue.all %}
<li><a href="{% url "ListeUEsParLangue" langue.code %}">{{ langue.label }}</a></li>
{% endfor %}
def add_langue_object(request):
from ..baobab.models import Langue
return {'Langue': Langue.objects}
或将Langue模型更改为:
class Langue(models.Model):
do_not_call_in_templates = True
.....