【问题标题】:In Django 1.11 getting Circular Import Errors When including app URLconf files in project URLconf File在 Django 1.11 中,当在项目 URLconf 文件中包含应用程序 URLconf 文件时出现循环导入错误
【发布时间】:2018-03-02 00:47:06
【问题描述】:

我是 Django 的新手,已经学习了几个教程来真正熟悉结构,现在正在学习官方教程。

我创建了一个polls 应用程序,其中有一个polls/views.py 文件如下:

from django.shortcuts import render
from django.http import HttpResponse


# Create your views here.
def index(request):
    return HttpResponse("Hello, World. You're at the polls index.")

我还使用以下代码创建了一个 App URLconf 文件 polls/urls.py

from django.conf.urls import url

from . import views

url_patterns = [
    url(r'^$', views.index, name='index'),
]

这与 Django 教程中的做法几乎完全相同。

我的问题是当我在项目级别的主 projectname/url.py 文件中指定 url 路由时:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

执行此操作时,我收到以下错误:

django.core.exceptions.ImproperlyConfigured: The included URLconf '<module 'polls.urls' from 'ProjectFolder\\polls\\urls.py'>' 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.

这是官方 Django 教程规定的完成方式。但是,如果我从应用程序中明确导入polls/views.py 文件,我可以完成以下任务:

from django.conf.urls import url
from django.contrib import admin
from polls import views


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^polls/', views.index),

]

我最关心的是这种方法需要导入我创建的每个 app/urls 文件,以及与官方 Django 指令的明显差异。

我什至不敢问这个问题,因为我觉得这样一个基本问题一定很容易解决。任何帮助将不胜感激。

为了澄清,我可以通过从应用程序中显式导入视图文件来解决该错误。每当使用 Django 文档描述的使用 include() 函数的方法时,我都会收到错误消息。我很欣赏这个函数的价值,并且想知道为什么会出现上述错误。

【问题讨论】:

  • polls/views.py 文件是我问题中的第一个代码块。
  • 你可以试试from polls.views import index。我认为您在两个文件中导入视图时存在冲突。
  • 是的,请参考我的问题中的第二个代码块。
  • 是的,抱歉我已经更新了我的评论,我一开始没看到
  • 做了一个回答,我认为你的错误是关于命名模式。见下文

标签: django django-urls urlconf


【解决方案1】:

只需在您的poll.views.py 中写入urlpatterns = [ .. 而不是url_patterns

【讨论】:

  • url_patterns 列表被 Django 文档解释为属于poll.urls.py 文件,就像它属于mainprojectname/urls.py 文件一样。即使您指的是urls.py 文件,我仍然不确定您在描述什么。
  • 你能给我链接那个教程吗?从官方文档我看到:urlpatterns = [ url(r'^$', views.index, name='index'), ] 而不是url_patternsdocs.djangoproject.com/en/1.11/intro/tutorial01/…
  • 我只是说你拼错了变量名urlpatterns
  • 没问题,这有时会发生 :)
猜你喜欢
  • 2018-10-30
  • 1970-01-01
  • 2023-03-26
  • 2012-11-27
  • 2017-12-14
  • 2015-07-01
  • 2011-08-26
  • 2012-03-07
相关资源
最近更新 更多