这是我当前用来测试我的网站是在本地部署,在登台还是在生产中的代码:
def get_base_url(request=None):
BASE_URL = request.META.get('HTTP_HOST') if request else settings.STATIC_SITE_URL
if not BASE_URL.startswith('http'):
BASE_URL = 'http://' + BASE_URL # such as "localhost:8000"
return BASE_URL
要执行类似发送密码重置链接的操作,我会这样做:
BASE_URL = get_base_url(request)
PATH = BASE_URL.rstrip('/') + reverse('logged_in')
是否有一种更清洁的方法?我尝试了其他几种方法,但这似乎返回了最正确和一致的结果。
答案 0 :(得分:1)
根据我将许多Django应用程序部署到生产中的经验,最好的方法是将设置分为不同的模块。在Using Multiple Settings Files
一章的Two Scoops of Django中也对此进行了很好的描述。
settings/
base.py
local.py
stage.py
production.py
local
,stage
,production
继承自base
。
例如local.py
:
from .base import *
DEBUG = True
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'db_name',
'HOST': 'localhost',
}
}
INSTALLED_APPS += ['debug_toolbar', ]
BASE_URL = 'http://localhost:8080/'
例如production.py
:
from .base import *
DEBUG = False
...
BASE_URL = 'https://example.com'
例如stage.py
:
from .base import *
DEBUG = False
BASE_URL = 'https://stage.example.com'
此后,您只需在每个设置文件中为每个特定的环境设置BASE_URL
,然后从settings.BASE_URL
进行访问即可。
If将使您的生活更加轻松,并允许根据环境动态地配置设置。