【问题标题】:keyError in Django. During template renderingDjango 中的键错误。在模板渲染期间
【发布时间】:2013-01-26 09:44:20
【问题描述】:

对不起,如果它是一个菜鸟代码或问题。我正在使用 django-pagination 进行分页,我正在这样做。但这在我的页面上给了我 keyError 并且它提到它在模板渲染期间出现错误。我在这里做错了什么。我已经成功安装了分页,修改了 settings.py 文件。但我不知道我需要在这里做什么。任何帮助将不胜感激。

 <table class="active_table"  summary="active_user">
    <thead>
     <tr><th>Name</th><th>Mobile Number</th><th>Count</th></tr>
    </thead>
    <tbody id="table_content">
     {% load pagination_tags %}
       {% block content %}
         {% autopaginate response_data 5 %}
           {% for b in response_data %}
              <tr class="table_rows"><td>{{ b.name }}</td><td>{{ b.mobile_number }}</td><td>{{ b.count }}</td></tr>
           {% endfor %}
         {% paginate %}
        {% endblock %}
     </tbody>
  </table>

详细的traceback贴在这里http://dpaste.com/919526/

视图代码如下

views.py

@csrf_exempt

def active_user_table(request, b): 如果 request.method != "GET": 引发Http404

if (b=='4'):
         cursor = connection.cursor()
         cursor.execute("SELECT core_user.id, name,mobile_number,COUNT(*) as count, created FROM core_user,core_useractivity WHERE core_user.id = core_useractivity.user_id GROUP BY user_id ORDER BY count DESC")
         response_data = dictfetchall(cursor)
         return render_to_response("siteadmin/active_user_table.tmpl",{'response_data':response_data})
elif (b=='3'):
         cursor = connection.cursor()
         cursor.execute("SELECT core_user.id, name, mobile_number, COUNT(*) as count, created FROM core_user, core_useractivity WHERE core_user.id = core_useractivity.user_id AND MONTH(CAST(created as date)) = MONTH(NOW()) AND YEAR(cast(created as date)) = YEAR(NOW()) GROUP BY user_id ORDER BY count DESC")
         response_data = dictfetchall(cursor)
         return render_to_response("siteadmin/active_user_table.tmpl",{'response_data': response_data})
elif (b=='2'):
         cursor = connection.cursor()
         cursor.execute("SELECT core_user.id, name, mobile_number, COUNT(*) as count, created FROM core_user, core_useractivity WHERE core_user.id = core_useractivity.user_id AND DATEDIFF(NOW(), created) <= 7 GROUP BY user_id ORDER BY count DESC")
         response_data = dictfetchall(cursor)
         return render_to_response("siteadmin/active_user_table.tmpl",{'response_data': response_data})
elif (b=='1'):
         cursor = connection.cursor()
         cursor.execute("SELECT core_user.id, name, mobile_number, COUNT(*) as count, created FROM core_user, core_useractivity WHERE core_user.id = core_useractivity.user_id AND DATE(created) = DATE(NOW())")
         response_data = dictfetchall(cursor)
         return render_to_response("siteadmin/active_user_table.tmpl",{'response_data': response_data})
else:
         raise Http404

抱歉,我目前没有使用 django ORM,但我会在以后使用。

【问题讨论】:

    标签: python django django-pagination


    【解决方案1】:

    您必须在 render_to_response 调用中添加 context_instance

    return render_to_response("siteadmin/active_user_table.tmpl",{'response_data': response_data}, context_instance=RequestContext(request))
    

    或者您可以在 settings.py 中使用 TEMPLATE_CONTEXT_PROCESSORS 元组。将此字符串“django.core.context_processors.request”添加到上下文处理器,每个 RequestContext 都将包含一个变量请求。

    【讨论】:

    • 我已将这些内容添加到我的 settings.py 中。这就是我添加的内容 - :TEMPLATE_CONTEXT_PROCESSORS =(“django.core.context_processors.auth”,“django.core.context_processors.debug”,“django.core.context_processors.i18n”,“django.core.context_processors.media” , "django.core.context_processors.static", "django.contrib.messages.context_processors.messages", "django.core.context_processors.request", ) 我想问的是即使这样我也需要添加 context_instance=RequestContext(请求)到我的 render_to_reponse。
    【解决方案2】:

    我自己解决了,但感谢 ndpu 的帮助,至少我确信除了一些设置问题之外没有其他问题。在这个问题I have problems with setting up django-pagination。 Alasdair 曾提到将“django.contrib.auth.context_processors.auth”添加到 TEMPLATE_CONTEXT_PROCESSORS 中。只需添加它,我就会得到正确的预期值。

    【讨论】:

      【解决方案3】:

      对于那些使用render shortcut的人 仍然面临这个错误,只需将{'request': request } 添加到上下文变量中

      context = { ..., 'request':request}
      return render(request, 'templatename.html', context)
      

      【讨论】:

      • 这会做什么?我的意思是这适合什么情况?
      • @JohnDoe,我遇到了同样的错误,但我正在使用render 快​​捷方式呈现我的回复;不是 OP 使用的 render_to_response 方法。错误的原因还是一样的;即模板系统找不到request 变量。只需在上下文中插入该变量就解决了我的问题。
      【解决方案4】:

      我之前也遇到过这个错误。我收到以下错误: 内部服务器错误:/cancel-email/

      Internal Server Error: /cancel-email/
      Traceback (most recent call last):
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/base.py", line 506, in parse
          compile_func = self.tags[command]
      KeyError: 'static'
      
      During handling of the above exception, another exception occurred:
      
      Traceback (most recent call last):
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/core/handlers/base.py", line 149, in get_response
          response = self.process_exception_by_middleware(e, request)
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/core/handlers/base.py", line 147, in get_response
          response = wrapped_callback(request, *callback_args, **callback_kwargs)
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
          return view_func(*args, **kwargs)
        File "/var/www/recruiter-new/recruiter/scheduler.py", line 803, in cancelEmail
          return render(request,'scheduler/cancel-email-part.html',{"cancel_email" :EmailDetail})
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/shortcuts.py", line 67, in render
          template_name, context, request=request, using=using)
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/loader.py", line 96, in render_to_string
          template = get_template(template_name, using=using)
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/loader.py", line 32, in get_template
          return engine.get_template(template_name, dirs)
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/backends/django.py", line 40, in get_template
          return Template(self.engine.get_template(template_name, dirs), self)
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/engine.py", line 190, in get_template
          template, origin = self.find_template(template_name, dirs)
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/engine.py", line 157, in find_template
          name, template_dirs=dirs, skip=skip,
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/loaders/base.py", line 46, in get_template
          contents, origin, origin.template_name, self.engine,
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/base.py", line 189, in __init__
          self.nodelist = self.compile_nodelist()
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/base.py", line 230, in compile_nodelist
          return parser.parse()
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/base.py", line 508, in parse
          self.invalid_block_tag(token, command, parse_until)
        File "/home/kashif/recEnv/lib/python3.6/site-packages/django/template/base.py", line 568, in invalid_block_tag
          "or load this tag?" % (token.lineno, command)
      django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 74: 'static'. Did you forget to register or load this tag?
      [07/Aug/2018 08:43:26] "POST /cancel-email/ HTTP/1.1" 500 20789
      

      我尝试了一些谷歌解决方案但无法解决,然后终于再次检查我的代码,发现模板文件上有一个愚蠢的错误。

      只需添加:

      {% load static %}
      

      在您的模板文件之上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-03
        • 2020-11-18
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-21
        • 2017-11-13
        相关资源
        最近更新 更多