我回答这个问题的原因是因为它是多年前回答的,而这些答案对于较新的 Django 版本不再正确或有用,或者您应该了解更好的做法。
因此,如果您的 Django 项目中有多个应用程序,那么您应该为每个应用程序使用一个新的 urls.py 文件。这意味着如果您启动一个新应用程序,那么您必须在新应用程序的子文件夹中手动创建一个名为 urls.py 的新文件。许多初学者首先不明白为什么这样做很好,但如果您计划在一个 Django 项目中创建更多应用程序,这是一个很好的做法。
当您启动一个项目时,会在您的项目文件夹中自动创建 urls.py 文件,但是如果您在 Django 中创建/启动一个新应用程序,那么最好为该应用程序自己创建一个单独的 urls.py文件夹。(这样一来,您将永远不会遇到“将不同应用程序的视图导入 urls.py”的问题)。
为您的应用创建 urls.py 文件后,您必须通过以下方式将该应用的 urls.py 文件包含在项目的 urls.py 文件中:
让我们看一个创建名为“my_new_app”的新应用程序的示例。这是您项目的主 urls.py 文件的样子:
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^my_new_app/', include('my_new_app.urls')),
]
在项目的 urls.py 文件中,您必须导入“include”方法,然后您可以将 my_new_app urls.py 文件包含在项目的主 urls.py 文件中。在您的 my_new_app 文件夹中,您必须手动创建一个 urls.py 文件,如上所述。然后,您必须将该文件用于 my_new_app 的所有 urlpatterns。当然,这样它会自动包含在项目的主 urls.py 文件中。
所以这就是你的 my_new_app 自己的 urls.py 文件的样子:
from django.conf.urls import url
from my_new_app import views
urlpatterns = [
url(r'^$', views.index, name = "index"),
]
假设您还在“my_new_app/views.py”文件中创建了第一个名为“index”的视图。
my_new_app/views.py 文件如下所示:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World!")
您可以在浏览器中查看您的 my_new_app:
http://localhost:8000/my_new_app
(当然,您可以在项目的 urls.py 文件中为 my_new_app 提供任何 url。)
现在,您可以在 Django 项目中创建另一个名为 my_second_app 的应用程序,您也应该为该应用程序重复上述步骤。这样,您将来自不同应用程序的视图导入 urls.py 文件不会有任何问题。对于 2017 年 Django 1.11 中的这个问题,这将是一个非常基本的“良好实践解决方案”。