【问题标题】:Pass a variable in an html template in django在 django 的 html 模板中传递一个变量
【发布时间】:2017-08-01 11:09:13
【问题描述】:

我需要在 html django 模板中创建一个带有动态创建选择的表单:我从一个 txt 文件中读取值并将其存储在一个字典中,当我调用渲染以响应时,我传递了这个字典,但是当我尝试要在模板中打印其值,它不会打印任何内容。 这是我的看法:

def home(request):

   i=0
   d = {}
   with open("static/my_file.txt") as f:
      for line in f:
        key=i
        val = line.rstrip()
        d[int(key)] = val
        i=i+1

   return render_to_response('home.html', var=d)

这是html模板中的打印:

{% for val in var %}
   {{ val.value }}
{% endfor %}

可以帮助我吗?

【问题讨论】:

  • 请在此处询问之前阅读文档。
  • 所有你需要知道的解决这个问题(视图和模板)确实被广泛记录。而且非常也很容易理解。

标签: python django django-templates


【解决方案1】:

Django documentation for for-loops in templates 表明 dicts 的语法略有不同。试试:

{% for key, value in var.items %}
    {{ value }}
{% endfor %}

【讨论】:

    【解决方案2】:

    试试这个而不是上面的 jinja 文件。 如果您只需要 var 的值,并且如果 var 是字典,那么下面的代码将适合您。

    {% for val in var.values() %}
       {{ val }}
    {% endfor %}
    

    【讨论】:

      【解决方案3】:

      您的视图有误,您需要将上下文作为字典传递 from django.shortcuts 导入渲染

      def home(request):
      
         i=0
         d = {}
         with open("static/my_file.txt") as f:
            for line in f:
              key=i
              val = line.rstrip()
              d[int(key)] = val
              i=i+1
      
         return render(request,'home.html', {'var':d})
      

      【讨论】:

      • 究竟是什么错误?我看到了相同的代码,唯一的更改是 OP 可能为节省空间而遗漏的导入。
      【解决方案4】:

      如果您只想将 view.py 中的变量或所有可用变量(局部变量)传递给您的模板,只需传递 locals() 在您的情况下应该是:

      view.py:

      def home(request):
      
         i=0
         d = {}
         with open("static/my_file.txt") as f:
            for line in f:
              key=i
              val = line.rstrip()
              d[int(key)] = val
              i=i+1
      
         return render('home.html', locals())
      

      模板:

      {% for key,value in d.items %}
         {{ value }}
      {% endfor %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 2021-02-15
        • 2021-06-30
        • 2023-01-03
        • 1970-01-01
        相关资源
        最近更新 更多