2016-04-08 8 views
0

Ich schrieb einen Befehl von Cron im Django-Projekt aufgerufen werden. wir müssen die vollständige URL zu meinem Django-Projekt drucken. Aber die Dev-URL unterscheidet sich von der Prod-URL.Wie bekomme ich root url innerhalb Befehl in Django

Zum Beispiel meines dev url ist: https://<dev machine ip>/myproject/dashboard/data

Mein prod url https://companyname.com/myproject/dashboard/data

sein kann

Erwartet:

für Entwickler: https://<dev machine ip>/myproject

für prod: https://companyname.com/myproject

würde ich nicht gerne hart Code die URL. Wie bekomme ich die vollständige URL oder Root-URL in der Befehlsdatei?

class Command(BaseCommand): 
     def handle(self, *args, **options): 
       url = "url" # need to get url here 
+0

Does cron laufen auf dem jeweiligen Server für beide oder nur einen cron läuft? Im ersten Fall können Sie 'localhost' verwenden. In der zweiten können Sie in Erwägung ziehen, einen zweiten Cron auszuführen. – Wtower

+0

https://docs.djangoproject.com/en/dev/ref/contrib/sites/#getting-the-current-domain-for-full-urls –

+0

Blick auf die Antwort von Shacker –

Antwort

0

Ich würde dies als eine Variable in settings.py setzen. Sie müssen eine Token-Datei oder eine Umgebungsvariable auf Ihrem Produktionsserver erstellen und dann die Variable von ihrer Existenz abhängig machen.

settings.py:

import os 

# Either use a token file 
PRODUCTION = os.path.exists('/somewhere/convienent/.DJANGO_PRODUCTION_TOKEN') 
# Or use an environment variable 
PRODUCTION = 'DJANGO_PRODUCTION_SERVER' in os.environ 

if PRODUCTION: 
    BASE_URL = "<dev machine ip>" # This could be computed if you want. 
else: 
    BASE_URL = "companyname.com" 

Ihr Befehl:

from django.conf import settings 

class Command(BaseCommand): 
    def handle(self, *args, **options): 
     url = settings.BASE_URL