Para produção, recomendo manter os aplicativos separados, como você sugere (em dois sites nginx diferentes).
Divida seu projeto Django em aplicativos: ie. 'core', 'api', 'web'. Dessa forma, você pode compartilhar o aplicativo que contém os modelos e a lógica 'core' e fazer com que as duas outras aplicações 'api' e 'web' reutilizem esse código.
Porque, na verdade, você está descrevendo dois serviços (API e web), você pode facilmente criar dois settings.py e wsgi diferentes para o Django, cada um deles incluindo os aplicativos apropriados. Essa é uma abordagem comum: cada aplicativo inclui e expõe apenas o código de que precisa. Ter nomes de domínio e serviços separados permitiria uma distribuição mais fácil e melhor à medida que o site cresce. Além disso, permite um ajuste mais fácil de cada configuração de aplicativo (configurações de log, middleware, etc.).
Se o seu aplicativo não precisar dar suporte a tantas solicitações, ficarei feliz em manter um único settings.py e usar URLs para direcionar solicitações para um aplicativo ou outro. Você pode fazer isso para o desenvolvimento também.
Se você deseja incluir uma ou outras URLs dependendo das configurações, use algo como:
# Your generic URL patterns
urlpatterns = patterns('',
#(r'^static/(?P<path>.*)$', 'django.views.static.serve'),
...
)
if settings.ENABLE_API:
urlpatterns += patterns('',
url(r'^', include('myapi.urls')),
)
if settings.ENABLE_WEB:
urlpatterns += patterns('',
url(r'^', include('web.urls')),
#url(r'^admin/', include(admin.site.urls)),
)
O exemplo acima é apenas um exemplo, o ponto é que você pode construir seus padrões de URL condicionalmente ou, por exemplo, usar o operador + para adicionar mais padrões a eles. Mais informações no link .