无法在模板中使用视图变量

时间:2017-08-07 12:44:41

标签: django django-templates render

在view.py中:

class DisplayView(generic.ListView):
    def get(self, request, **kwargs):
        if request.method == "GET":
            selection = request.GET.getlist("selection")  # list of checkbox values with name 'selection
            articles = Article.objects.all()

            args = {'articles': articles, 'selection': selection}
            print(selection)
            print(articles)
            return render(request, 'display.html', args)

在display.html中:

{% extends 'myapp/base.html' %}

{%block contentblock %}

{% for section in selection %}
    <h1>{{ section }}</h1>
        <script language="javascript">console.log(selection)</script>
{% endfor %}

{% endblock %}

我可以在终端上看到“选择”和“文章”打印,这意味着视图正确地从复选框中获取数据。 但是,我的html中没有出现任何内容,console.log会抛出错误,意味着数据未传递给模板... 为什么呢?

3 个答案:

答案 0 :(得分:3)

对于脚本,您需要添加括号:

$sele = "SELECT * FROM ".$country." WHERE name LIKE '%".$name."%'";

答案 1 :(得分:1)

更改此行

return render(request, display.html, args)

return render(request, 'display.html', args)

介意html是在模板内部而不是在任何其他子文件夹中,如果子文件夹在那里添加文件夹名称在单引号内

并在模板中

{% extends 'myapp/base.html' %}

{% block contentblock %}
<script language="javascript">console.log({{ selection }})</script>
    {% for section in selection %}
        <h1>{{ section }}</h1>
            <script language="javascript">console.log({{ articles }})</script>
        {% for article in articles %}
            <h2>{{ article }}<h2>
        {% endfor %}
    {% endfor %}

    {% endblock %}

答案 2 :(得分:0)

首先,你应该为选择部分添加{%endfor%},你使用两个for循环。其次,您需要在返回渲染中添加''到模板名称