小编e-J*_*Jah的帖子

django-storages + sorl_thumbnail + S3不能很好地协同工作(URL不匹配)

我正在使用django-storage和sorl_thumbnail,我正在使用Amazon S3来获取静态和媒体文件.我使用一个带2个文件夹的存储桶,1个用于静态,1个用于媒体.

这是我的配置:

MEDIA_ROOT = '/media/'
MEDIA_URL = 'https://s3.amazonaws.com/my-bucket/media/'
STATIC_ROOT = '/static/'
STATIC_URL = 'https://s3.amazonaws.com/my-bucket/static/'
AWS_STORAGE_BUCKET_NAME = 'my-bucket'
DEFAULT_FILE_STORAGE = 'my_lib.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'my_lib.s3utils.StaticRootS3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

MediaRootS3BotoStorageStaticRootS3BotoStorage定义如下:

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')
Run Code Online (Sandbox Code Playgroud)

当我使用sorl_thumbnail时,生成的缩略图位于右侧目录中:https://s3.amazonaws.com/my-bucket/media/cache但是当sorl_thumbnail尝试检索已存在的缩略图时,生成的URL为:https://s3.amazonaws.com/my-bucket/cache,您会注意到该media文件夹被省略.

你知道我怎么能解决这个问题吗?

我知道我可以使用django-storages并将我的静态和媒体文件全部混合在我的桶中,但这对我来说有点太脏了:)

谢谢!

django amazon-s3 boto sorl-thumbnail django-storage

9
推荐指数
2
解决办法
2740
查看次数

加入/总结CouchDB

使用CouchDB,我目前有一个代表一个想法的文档,你可以评价这个想法.每个想法都是一个文档,每个评级都是一个不同的文档.我这样做是为了避免在人们评价想法时出现并发访问问题.

我的文档看起来像那样(我简化了它们):

一个主意:

{
 "_id": "idea1",
 "title": "A great idea"
}
Run Code Online (Sandbox Code Playgroud)

评分:

{
 "_id": "rating1",
 "rating": 1,
 "author": "author1"
}

{
 "_id": "rating2",
 "rating": 1,
 "author": "author2"
}
Run Code Online (Sandbox Code Playgroud)

我目前使用reduce函数来返回我的想法ID和他/她的评级(一个简单的评级总和):

地图:

function(doc) {
  if (doc.type == "rating")
    emit(doc.idea_id, doc.rating);    
}
Run Code Online (Sandbox Code Playgroud)

降低:

function(keys, values, rereduce) {
  return sum(values);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我如何"加入""想法"文档,其中减少的结果代表了该想法的评级?

couchdb document-oriented-db nosql

4
推荐指数
1
解决办法
1793
查看次数

获取/呈现一对多关系的最佳方法是什么?

我有两个看起来像这样的模型:

class Entry(models.Model):
user = models.ForeignKey(User)
dataname = models.TextField()
datadesc = models.TextField()
timestamp = models.DateTimeField(auto_now=True)

class EntryFile(models.Model):
    entry = models.ForeignKey(Entry)
    datafile = models.FileField(upload_to="uploads/%Y/%m/%d/%H-%M-%S")
Run Code Online (Sandbox Code Playgroud)

我想为特定用户呈现所有条目及其相关文件.现在我在我的视图中这样做以获取值:

    entries = Entry.objects.filter(user=request.user).order_by("-timestamp")
    files = {}
    for entry in entries:
        entryfiles = EntryFile.objects.filter(entry=entry)
        files[entry] = entryfiles
    return render_to_response("index.html", {'user': request.user, 'entries': entries, 'files': files, 'message': message})
Run Code Online (Sandbox Code Playgroud)

但我无法/不知道如何在我的模板中使用这些数据.这就是我现在所做的,但是不起作用:

{% for entry in entries %}
    <td>{{ entry.datadesc }}</td>
    <td><table>
        {{ files.entry }}
        {% for file in files.entry %}
        <td>{{ file.datafile.name|split:"/"|last }}</td>
        <td>{{ file.datafile.size|filesizeformat }}</td>
        <td><a href="{{ object.datafile.url }}">download</a></td> …
Run Code Online (Sandbox Code Playgroud)

python django

2
推荐指数
1
解决办法
157
查看次数