【问题标题】:Django URLs randomly shows ImproperlyConfiguredDjango URLs 随机显示 ImproperlyConfigured
【发布时间】:2018-06-22 13:27:47
【问题描述】:

我有时会收到错误配置“包含的 URLconf 'app_name.urls' 似乎没有任何模式。”在我的网站上。 当我重新访问导致错误的 URL 时,它工作正常。在这些情况下,错误表明“模式”是一个模块。大多数情况下,它会正确加载我的网址。

有人发现我的网址有问题吗?这是一个奇怪的问题,出现在根 URL (/) 和详细信息页面 (####/details) 上。我从未见过我的其他 URL 出现错误,但它们没有收到太多流量。我无法重现该错误,但我每天都会收到几次。

我将 Python 3.5.2 与 Django 2.0 一起使用。我相信该代码库最初是用 Django 1.6 编写的。我最近迁移到 2.0 时才注意到这个问题。

我修改了 django/urls/resolvers.py 以记录 'patterns' 变量,并且大部分时间我都会收到此列表:

[<URLResolver <URLPattern list> (admin:admin) 'admin/'>,
 <URLPattern '<int:pk>/details' [name='details']>,
 <URLPattern 'check/' [name='check']>,
 <URLPattern 'logout/' [name='logout']>,
 <URLPattern 'search/' [name='search']>,
 <URLPattern 'features/' [name='features']>,
 <URLPattern 'terms-of-service/' [name='terms']>,
 <URLPattern 'privacy-policy/' [name='privacy']>,
 <URLPattern '' [name='index']>]

urls.py

from django.urls import path, re_path
from django.contrib import admin

from app_name import views
from app_name.result_view import SubmissionDetailView



handler404 = 'app_name.views.not_found_view'

urlpatterns = [
    path('admin/', admin.site.urls),
    path('<int:pk>/details', SubmissionDetailView.as_view(), name='details'),
    path('check/', views.check, name='check'),
    path('logout/', views.logout_view, name='logout'),
    path('search/', views.search, name='search'),
    path('features/', views.features, name='features'),
    path('terms-of-service/', views.terms, name='terms'),
    path('privacy-policy/', views.privacy, name='privacy'),
    path('', views.index, name='index'),
]

例外

django.core.exceptions.ImproperlyConfigured: The included URLconf 'app_name.urls' does not appear to have any patterns in it.
If you see valid patterns in the file then the issue is probably caused by a circular import.

追溯

/opt/web/env/lib/python3.5/site-packages/django/urls/resolvers.py in url_patterns
            iter(patterns)
Local Vars

Variable    Value
msg       ("The included URLconf '{name}' does not appear to have any patterns in it. If "
 'you see valid patterns in the file then the issue is probably caused by a '
 'circular import.')
patterns    <module 'app_name.urls' from '/opt/web/app/my_site/app_name/urls.py'>
self    <URLResolver 'app_name.urls' (None:None) '^/'>

During handling of the above exception ('module' object is not iterable), another exception occurred:

/opt/web/env/lib/python3.5/site-packages/django/core/handlers/exception.py in inner
            response = get_response(request)
[SNIP]

/opt/web/env/lib/python3.5/site-packages/django/urls/base.py in resolve
    return get_resolver(urlconf).resolve(path)
Local Vars

Variable    Value
path      '/4567/details'
urlconf   'app_name.urls'

/opt/web/env/lib/python3.5/site-packages/django/urls/resolvers.py in resolve
            for pattern in self.url_patterns:
Local Vars

Variable    Value
args         ()
kwargs       {}
match        ('4567/details', (), {})
new_path     '4567/details'
path         '/4567/details'
self         <URLResolver 'app_name.urls' (None:None) '^/'>
tried        []

/opt/web/env/lib/python3.5/site-packages/django/utils/functional.py in __get__
        res = instance.__dict__[self.name] = self.func(instance)
Local Vars

Variable    Value
cls         <class 'django.urls.resolvers.URLResolver'>
instance    <URLResolver 'app_name.urls' (None:None) '^/'>
self        <django.utils.functional.cached_property object at 0x7f06c7d2c550>

/opt/web/env/lib/python3.5/site-packages/django/urls/resolvers.py in url_patterns
            raise ImproperlyConfigured(msg.format(name=self.urlconf_name))
Local Vars

Variable    Value
msg        ("The included URLconf '{name}' does not appear to have any patterns in it. If "
 'you see valid patterns in the file then the issue is probably caused by a '
 'circular import.')
patterns    <module 'app_name.urls' from '/opt/web/app/my_site/app_name/urls.py'>
self    <URLResolver 'app_name.urls' (None:None) '^/'>

【问题讨论】:

  • 这没有意义,除非你遗漏了一些东西。您的所有 URL 模式都不包含 app_name。 app_name 是什么以及在哪里?
  • app_name 是我的 Django 应用程序的名称。我的网站只有一个应用程序,因此所有 URL 都在 app_name/urls.py 文件中定义。
  • 这个随机弹出,即没有你可以看到的模式?
  • 我无法辨别它来自不同的用户(基于 IP)和一天中的不同时间。我今天收到两次错误。不同的用户和 URL。大约相隔12小时。我今天有大约 300 个用户。也许我可以做一些额外的日志记录来找到模式?

标签: python django django-urls


【解决方案1】:

而不是这个;

from app_name import views
from app_name.result_view import 
SubmissionDetailView



handler404 ='app_name.views.not_found_view'

urlpatterns = [
    path('admin/', admin.site.urls),
    path('<int:pk>/details',SubmissionDetailView.as_view(), name='details'),
    path('check/', views.check, name='check'),
    path('logout/', views.logout_view, name='logout'),
    path('search/', views.search, name='search'),
    path('features/', views.features, name='features'),
    path('terms-of-service/', views.terms, name='terms'),
    path('privacy-policy/', views.privacy, name='privacy'),
    path('', views.index, name='index'),
]

您应该将您的应用程序 url 包含到项目 urls.py 文件中,如下所示:

项目 urls.py:

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/',admin.site.urls),
    path('',include('app_name.urls'))
]

在 app_name 文件夹中创建一个 urls.py 文件,然后像这样描述你的 url:

app_name urls.py:

from django.urls import path
from . import views
from app_name.result_view import SubmissionDetailView

handler404 ='views.not_found_view'

urlpatterns = [
    path('<int:pk>/details',SubmissionDetailView.as_view(), name='details'),
    path('check/', views.check, name='check'),
    path('logout/', views.logout_view, name='logout'),
    path('search/', views.search, name='search'),
    path('features/', views.features, name='features'),
    path('terms-of-service/', views.terms, name='terms'),
    path('privacy-policy/', views.privacy, name='privacy'),
    path('', views.index, name='index'),
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多