2010-11-04 28 views

Trả lời

53

Tôi thường đặt một cái gì đó như thế này trong settings.py:

import socket 

try: 
    HOSTNAME = socket.gethostname() 
except: 
    HOSTNAME = 'localhost' 
+7

Giải pháp của bạn không hoạt động, nếu bạn sử dụng Docker. Nó sẽ hiển thị ID vùng chứa thay vì URL. –

+134

Giải pháp của tôi được viết trước khi Docker tồn tại. Lấy làm tiếc. –

+2

Giải pháp đúng có vẻ là 'request.get_host()' – Dorian

4

Bạn đã thử os.environ.get('HOSTNAME')?

57

Nếu bạn có một yêu cầu (ví dụ, đây là bên trong một cái nhìn), bạn có thể nhìn vào request.get_host() mà được bạn một LOCNAME đầy đủ (máy chủ và cổng), có tính đến tiêu đề proxy ngược lại nếu có. Nếu bạn không có yêu cầu, bạn nên định cấu hình tên máy chủ ở đâu đó trong cài đặt của mình. Chỉ cần nhìn vào tên máy chủ hệ thống có thể không rõ ràng trong nhiều trường hợp, máy chủ ảo là phổ biến nhất.

3

Chỉ cần thêm vào @Tobu's answer. Nếu bạn có một đối tượng yêu cầu, và bạn muốn biết giao thức (ví dụ: http/https), bạn có thể làm:

if request.is_secure(): 
    protocol = 'https' 
else: 
    protocol = 'http' 

is_secure() lợi nhuận True nếu yêu cầu được thực hiện với HTTPS.

+6

Bạn không thể chỉ sử dụng [request.scheme] (https://docs.djangoproject.com/en/dev/ref/request-response/#django.http .HttpRequest.scheme)? –

+2

@RyneEverett cảm ơn. không biết về nó (facepalm). – azalea

Các vấn đề liên quan