Django IndexError:从空列表中弹出

时间:2017-02-06 17:42:34

标签: python django python-2.7

我一直在为本地侦察小组建立一个网站。出于某种原因,Django中的这个错误仍然存​​在,我无法理解它来自何处以及如何解决它。

Traceback of Error

根据回溯的错误在我的index.html页面中:

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta charset="utf-8" />
    <meta name="robots" content="index, follow">
    <meta name="keywords" content="3rd, Ringwood, scouts, cubs, beavers, hall hire, hire, hall, hut, third">
    <meta name="description" content="3rd Ringwood Scout Group - Beavers, Cubs and Scouts. The hut is also a perfect place to hire for other activities.">
    <!-- <link rel="dns-prefetch" href="//"> -->
    <link rel="icon" href="/static/images/favicon.png" type="image/png" />
    <link rel="stylesheet" href="/static/css/style.css" charset="utf-8">
    <link rel="stylesheet" href="https://ink.global.ssl.fastly.net/3.1.10/css/font-awesome.min.css" />
    <title>3rd Ringwood Scouts</title>
    <script type="text/javascript" src="https://ink.global.ssl.fastly.net/3.1.10/js/holder.js"></script>
    <script type="text/javascript" src="https://ink.global.ssl.fastly.net/3.1.10/js/ink-all.js"></script>
    <script src="https://code.jquery.com/jquery.min.js" charset="utf-8"></script>
</head>

正如所要求的完整追溯:

Environment:


Request Method: GET
Request URL: http://localhost:8080/

Django Version: 1.10.5
Python Version: 2.7.10
Installed Applications:
('flat',
 'redactor',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'events',
 'information')
Installed Middleware:
('django.middleware.cache.UpdateCacheMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware')


Template error:
In template /Users/Max/Documents/scouts_backend/templates/index.html, error at line 11
   pop from empty list   1 : {% load staticfiles %}
   2 : <!DOCTYPE html>
   3 : <html>
   4 :     <head>
   5 :         <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
   6 :         <meta charset="utf-8" />
   7 :         <meta name="robots" content="index, follow">
   8 :         <meta name="keywords" content="3rd, Ringwood, scouts, cubs, beavers, hall hire, hire, hall, hut, third">
   9 :         <meta name="description" content="3rd Ringwood Scout Group - Beavers, Cubs and Scouts. The hut is also a perfect place to hire for other activities.">
   10 :         <!-- <link rel="dns-prefetch" href="//"> -->
   11 :         <link rel="icon" href="/static/images/favicon.png" typ e="image/png" />
    12 :         <!--<link rel="stylesheet" href="/static/css/style.css" charset="utf-8"> -->
   13 :         <link rel="stylesheet" href="https://ink.global.ssl.fastly.net/3.1.10/css/font-awesome.min.css" />
   14 :         <title>3rd Ringwood Scouts</title>
   15 :         <script type="text/javascript" src="https://ink.global.ssl.fastly.net/3.1.10/js/holder.js"></script>
   16 :         <script type="text/javascript" src="https://ink.global.ssl.fastly.net/3.1.10/js/ink-all.js"></script>
   17 :         <script src="https://code.jquery.com/jquery.min.js" charset="utf-8"></script>
   18 :     </head>
   19 :     <body>
   20 :         {% include "navbar.html" %}
   21 :         <!-- Begin Content -->


Traceback:

File "/Library/Python/2.7/site-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response
  217.                 response = self.process_exception_by_middleware(e, request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response
  215.                 response = response.render()

File "/Library/Python/2.7/site-packages/django/template/response.py" in render
  109.             self.content = self.rendered_content

File "/Library/Python/2.7/site-packages/django/template/response.py" in rendered_content
  86.         content = template.render(context, self._request)

File "/Library/Python/2.7/site-packages/django/template/backends/django.py" in render
  66.             return self.template.render(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in render
  208.                     return self._render(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in render
  994.                 bit = node.render_annotated(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in render_annotated
  961.             return self.render(context)

File "/Library/Python/2.7/site-packages/django/template/loader_tags.py" in render
  210.                 return template.render(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in render
  210.                 return self._render(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in render
  994.                 bit = node.render_annotated(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in render_annotated
  961.             return self.render(context)

File "/Library/Python/2.7/site-packages/django/template/defaulttags.py" in render
  315.                 return nodelist.render(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in render
  994.                 bit = node.render_annotated(context)

File "/Library/Python/2.7/site-packages/django/template/base.py" in render_annotated
  961.             return self.render(context)

File "/Library/Python/2.7/site-packages/django/template/defaulttags.py" in render
  439.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

File "/Library/Python/2.7/site-packages/django/urls/base.py" in reverse
  91.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))

File "/Library/Python/2.7/site-packages/django/urls/resolvers.py" in _reverse_with_prefix
  344.             self._populate()

File "/Library/Python/2.7/site-packages/django/urls/resolvers.py" in _populate
  209.                     for name in pattern.reverse_dict:

File "/Library/Python/2.7/site-packages/django/urls/resolvers.py" in reverse_dict
  242.             self._populate()

File "/Library/Python/2.7/site-packages/django/urls/resolvers.py" in _populate
  228.                 bits = normalize(p_pattern)

File "/Library/Python/2.7/site-packages/django/utils/regex_helper.py" in normalize
  110.                 start = non_capturing_groups.pop()

Exception Type: IndexError at /
Exception Value: pop from empty list

更新

我已经在模板中隔离了这个问题,这里是index.html文件的一部分,其中包含错误:

<body>
    {% include "navbar.html" %}
    <!-- Begin Content -->
    <div class="content-container">
        <div id="home" class="content-drawer">
            {% include "header.html" %} <!-- This line causes the error -->
            <section class="beavers">

header.html中

<section class="welcome">
    <div class="ink-grid">
        <div class="column-group push-middle">
            <div class="xlarge-70 large-70 all-80 align-center push-center">
                <img src="https://placeholdit.imgix.net/~text?txtsize=20&txt=Logo&w=75&h=75" />
                <h1>------</h1>
                <p>Group Scout Leader: <a href="/contact"><strong>-----</strong> -----</a></p>
                {% if user.is_authenticated %}
                    <p><b><a href="">{{ user.username }}</a> | <a href="{% url 'logout' %}">Logout</a></b></p>
                {% else %}
                    <p><b><a href="{% url 'login' %}?next={{request.path}}">Login</a></b></p>
                {% endif %}
            </div>
        </div>
    </div>
</section>

urls.py

    from django.conf.urls import include, url
    from django.contrib import admin
    from django.conf import settings
    from django.conf.urls.static import static
    from django.views.generic import TemplateView

    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url('^', include('django.contrib.auth.urls')),
        url(r'^groups/', include('events.urls')),
        url(r'^', include('information.urls')),
        url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
        url(r'^booking/$', TemplateView.as_view(template_name='static_pages/booking.html'), name='booking'),
        url(r'^links/$', TemplateView.as_view(template_name='static_pages/links.html'), name='links'),
        url(r'^waiting-list/$', TemplateView.as_view(template_name='static_pages/waiting-list.html'), name='waiting list')
    ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

events/urls.py

from django.conf.urls import url
from django.views.generic import RedirectView, TemplateView
from . import views

urlpatterns = [
    url(r'^$', RedirectView.as_view(pattern_name='index'), name='group_redirect'),
    url(r'^events/$', views.event_list, name='event_list'),
    url(r'^leaders/$', views.leader_list, name='leader_list'),
    url(r'^event/(?P<event_id>[0-9])/$', views.event, name='specific_event'),
    url(r'^leader/(?P<leader_id>[0-9)])/$', views.leader, name='specific_leader'),
    url(r'^(?P<group_name>[\w-]+)/$', views.group, name='group_home'),
]

信息/ urls.py

from django.conf.urls import url
from django.views.generic import TemplateView
from . import views

urlpatterns = [
    url(r'^contact/$', views.contact, name='contact'),
    url(r'^contact/success/$', TemplateView.as_view(template_name='contact/success.html'), name='contact_success'),
]

2 个答案:

答案 0 :(得分:3)

看起来你在django本身遇到了一个边缘案例错误。

要解决此问题,请在urls.py

中更改此行
# pathological pattern:
url(r'^leader/(?P<leader_id>[0-9)])/$', views.leader, name='specific_leader')
# unexpected item in url area!  ^ 

# fixed pattern:
url(r'^leader/(?P<leader_id>[0-9])/$', views.leader, name='specific_leader')

为什么会触发错误? Django尝试将模板标记{% url 'login' %}反转为实际的登录URL。它遍历所有url模式并执行某种反向正则表达式。 但由于()在正则表达式中具有特殊含义,因此必须正确处理它们。在这种情况下,您有一个技术上有效(虽然明显不正确)的正则表达式,)位于意外的位置:[]组内。

看起来像一个不起眼的bug,显然它没有被django的测试套件覆盖。

django source code评论很好,所以你可以遵循他们的逻辑(即使它不太正确)。

# django/utils/regex_helper.py:111

elif ch == ')':
    # This can only be the end of a non-capturing group, since all
    # other unescaped parentheses are handled by the grouping
    # section later (and the full group is handled there).
    #
    # We regroup everything inside the capturing group so that it
    # can be quantified, if necessary.
    start = non_capturing_groups.pop()

答案 1 :(得分:0)

进入这个确切的问题,但我需要)组中的结束[](如此[^)])。 逃避它确实有帮助([^\)]),虽然它不是你期望在正则表达式中做的。