Python 加载URL模式而不激活它们?

Python 加载URL模式而不激活它们?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我的Django项目中有两个应用程序:一个web工具和一个REST接口 我在数据库系统上运行REST接口(例如db.myhost.com)。此接口仅具有对应于各种REST端点的URL模式: app_name = "rest" urlpatterns = [ url(r'^report/id/(?P<rid>[0-9]+)/$', views.ReportByID.as_view()), url(r'^report/slug/(?P<slug>[a-z0-9

我的Django项目中有两个应用程序:一个web工具和一个REST接口

我在数据库系统上运行REST接口(例如
db.myhost.com
)。此接口仅具有对应于各种REST端点的URL模式:

app_name = "rest"
urlpatterns = [
    url(r'^report/id/(?P<rid>[0-9]+)/$', views.ReportByID.as_view()),
    url(r'^report/slug/(?P<slug>[a-z0-9-]+)/$', views.ReportBySlug.as_view()),
]
REST接口仅启用REST URL模式,因为我只想通过该主机为REST端点提供服务:

# On my REST system
ROOT_URL = "myproject.rest_urls"
有没有一种方法可以让REST应用程序在不激活URL模式的情况下加载
mytool
URL模式?我不希望用户能够浏览到
db.myhost.com/some/cool/path/
并得到一个错误,因为该路径不是由该主机提供的,而是由web工具服务器提供的。但是,如果能够使用
reverse()
来获取
mytool
URL,即使它们只是相对的片段(即
/some/cool/path
…我可以始终在服务器名称前面加上前缀,这是不太可能更改的)


我可以对必要的路径进行硬编码,但我希望避免在将来需要更改的情况下进行硬编码。

我们可以使用django test utils
override\u settings
decorator进行硬编码。它将使用临时设置,因此不会对实时站点产生任何影响

设置.py mytool/url.py 访问未注册URL的反向
看起来您将它们作为单独的应用程序托管,所以请以相同的方式对待它们。如果REST服务需要访问工具服务,则在REST设置中设置工具服务,就像您对任何其他第三方服务所做的那样。这将帮助您将它们解耦,并且如果您决定将代码库分离到我不确定是否遵循的位置,这将变得更容易。我可以在任何地方看到这种设置的例子吗?不,我只是说你应该按照你称之为硬编码的正常方式来做。首先,为什么需要url?作为不同的服务向它发出请求?如果是这样,那么只需将url存储在您的设置中,url的存储方式与您向非常聪明的用户发出请求的第三方API的存储方式相同。谢谢你的提示!
# On my REST system
ROOT_URL = "myproject.rest_urls"
INSTALLED_APPS = [
    # .....
    'mytool',
    # .....
]
ROOT_URL = "myproject.rest_urls"
from django.urls import path
from . import views


urlpatterns = [
    path('news/<slug:slug>/', views.NewsDetailView.as_view(), name='news_detail'),
]
from django.test.utils import override_settings
from django.urls import reverse

def temp_reverse(url_conf, url_name, url_args=(), url_kwargs={}):

    @override_settings(ROOT_URLCONF=url_conf)
    def get_reverse(url_name, *args, **kwargs):
        return reverse(url_name, args=args, kwargs=kwargs)
    return get_reverse(url_name, *url_args, **url_kwargs)
from mytool.urils import temp_reverse
url = temp_reverse('mytool.urls', 'news_detail', url_kwargs={'slug': 'django-awesome'})
print(url)
# output: /news/django-awesome/