【问题标题】:Django : render not passing context variable to templateDjango:渲染不将上下文变量传递给模板
【发布时间】:2018-02-14 10:44:23
【问题描述】:

我有这个视图函数可以从 AWS Dynamodb 获取用户 ID 和帐号:

 def dsctbl2(request):
  dynamodb=boto3.client('dynamodb', region_name='us-west-2')
  response = dynamodb.scan(
    TableName='User-Account')
  filtered = response['Items']
  length = len(filtered)
  for k in range(length):
    accnum = filtered[k]['AccountNum']['S']
    uid = filtered[k]['UserId']['S']
    f = dict(AccountNum=accnum,userID=uid)
    rows = list(f.items())
  return render('useradd.html',{'rows': rows})

我几乎尝试了所有方法,但行值没有传递给我的模板。我什至尝试传递一个简单的字符串值,甚至没有通过。这是我希望在其中显示用户 ID 和帐户编号的模板表。

 <div class="mytable">
   <table>
    <thead>
    <tr>
    <th>Account #</th>
    <th>User Id</th>
    </tr>
    </thead>
   <tbody>
      {% for row in rows %}
   <tr>
    <td>{{ row.AccountNum }}</td>
    <td>{{ row.UserId }}</td>
   </tr>
        {% endfor %}
   </table>
 </div>

当我点击模板时,什么也没有出现。除了表格标题外,没有显示任何值。为什么渲染不将上下文变量(列表值)从我的视图传递到模板?我已经坚持了大约6个小时!有人可以解决这个问题吗?

【问题讨论】:

  • 此代码根本不起作用,因为 render 期望 Exprator 所说的三个参数,因此会将 {'rows': rows} 解释为模板名称并引发 TemplateDoesNotExist 错误。因此,您的视图似乎实际上并没有被调用。您可能需要显示 urls.py 并说明您要访问的 URL。
  • 我将请求添加为参数,但模板页面上仍然没有显示任何内容。
  • 我没有收到任何错误
  • 是的,因为正如我所说您的视图没有被调用。正如我也说过的,您应该发布您的 urls.py 并说明您实际访问的是哪个 URL。
  • 好吧..但它有点乱.. urls.py

标签: python django


【解决方案1】:
return render(request,'useradd.html',{'rows': rows})

您需要将请求作为第一个参数传递,

【讨论】:

  • 我试过了..不起作用。除了表格标题之外,模板页面上什么都没有显示
  • url(r'^adm/dsctbl2/', admviews.dsctbl2, name='dsctbl2'),
  • adm 是应用名称
  • 您应该在问题中添加完整的 urls.py,
猜你喜欢
  • 2019-02-23
  • 2015-10-12
  • 2019-04-03
  • 2014-03-10
  • 2017-12-22
  • 2021-02-13
  • 1970-01-01
  • 2016-05-22
  • 2014-11-30
相关资源
最近更新 更多