我正在尝试查找我的JavaScript文件的绝对路径(而不是URL)。与其对绝对路径进行硬编码,不如使用相对路径。例如:
/static/js/index.js
/static/config/1.json
/static/config/2.json
如果我可以获得index.js
的绝对路径,那么仅../config/
就无法访问两个json文件之一。
搜索SO和Internet时,我要么得到有关查找URL的建议,但是可以解决但不能解决我的问题。或对于文件路径,使用windows.location.pathname
,但我尝试对其进行的任何排列都会返回空字符串或/
。
var currentDirectory = window.location.pathname.split('/').slice(0, -1).join('/');
console.log("Curr dir: " + currentDirectory);
(返回空字符串)
var location = window.location.pathname;
var directoryPath = location.substring(0, location.lastIndexOf("/")+1);
console.log(" dirPath: " + directoryPath);
(返回/
)
我希望的是这样的
var absolute_path = window.function.absolute.path()
哪个会返回说:/u/user/develop/project/server/static/js/index.js
从中我可以:(再次提供伪代码)
var locations = absolute_path.split("js");
# location[0] = "/u/user/develop/project/server/static"
# location[1] = "js/index.js"
var config_file_locations = locations[0] + "config/";
var absolute_path_json1 = config_file_locations + "1.json"
-编辑-
好吧,看着window.location
,它返回的URL非常清楚,这不是答案。
答案 0 :(得分:0)
BlogModel
是绝对路径。您可以知道,因为它以class BlogModel(models.Model):
BLOG_STATUS = (
('PUBLISH', 'Publish'),
('DRAFT', 'Draft'),
)
blog_id = models.AutoField(primary_key=True)
user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='blogs')
title = models.CharField(max_length=255)
content = models.TextField(blank=True, null=True)
status = models.CharField(max_length=7, choices=BLOG_STATUS)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta():
db_table = 'blogs'
verbose_name = 'Blog'
verbose_name_plural = 'Blogs'
def __str__(self):
return self.title
@property
def files(self): #here is the property i added
return 'do something'
开头,然后将其带回到网站的根目录。
浏览器无法自动告知网络服务器如何确定给定URL的内容的任何信息。
浏览器唯一知道的是它向服务器请求了
class BlogFilesSerializer(ModelSerializer):
created_at = serializers.SerializerMethodField()
updated_at = serializers.SerializerMethodField()
class Meta:
model = BlogFilesModel
fields = ('blog_files_id', 'blog', 'path',
'created_at', 'updated_at')
extra_kwargs = {
'path': {
'error_messages': {
'blank': 'File is required'
},
}
}
class BlogSerializer(ModelSerializer):
blog_files = serializers.SerializerMethodField()
uploaded_files = serializers.FileField(required=True, source='files')
blog_created_at = serializers.SerializerMethodField(read_only=False)
class Meta:
model = BlogModel
fields = ('blog_id', 'user', 'title', 'content',
'status','blog_files', 'blog_created_at',
'uploaded_files',
)
,并且服务器响应了一些JavaScript。
服务器可能已读取静态文件,该文件可能位于名为/static/js/index.js
的目录中,而该目录可能是名为/
的子目录中的…那么服务器可能会获取整个URL,将其用于数据库查询中,然后从数据库中提取结果……或者它可能已将请求代理到另一洲另一台计算机上的另一台HTTP服务器。
如果您希望客户端JS了解HTTP服务器上文件系统的结构的任何信息,则需要以某种方式为其提供该信息。无法从浏览器获取它。