Django:context_processor

时间:2017-03-17 11:05:54

标签: django django-templates

我需要在基本模板中输入对模型类的引用。我可以从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 /

中的AttributeError
Manager 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调用返回的类实例时。

有什么想法吗?

很多,

2 个答案:

答案 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
    .....