私は Django Web サイトを運営しています。管理パネルからファイルをアップロードし、メイン サイトへの訪問者がそれをダウンロードできるようにしたいと考えています。Django-nonrel、Django FileTransfers、Google App Engine を使用してサイトを実行しています。App Engine Blob Storage でファイルを確認できるので、アップロード機能は正しく機能していると思います。私が理解できないように見えるのは、公開Webサイトで指定されたファイルへのダウンロードリンクを提示する方法です。関連するクラスを以下に貼り付けました。
次のモデルを持つ Calendar というアプリがあります。
class CalendarEvent (models.Model):
start = models.DateTimeField(auto_now=False, auto_now_add=False)
end = models.DateTimeField(auto_now=False, auto_now_add=False)
title = models.CharField(max_length=500)
description = models.TextField()
file = models.FileField(upload_to='uploads/%Y/%m/%d/%H/%M/%S/')
ビューは次のとおりです。
def calendar(request):
events = CalendarEvent.objects.exclude(start__lt=datetime.datetime.now()).order_by('start')
return render_to_response('home/calendar.html',{'events': events},context_instance=RequestContext(request))
def download_handler(request, pk):
upload = get_object_or_404(CalendarEvent, pk=pk)
return serve_file(request, upload.file, save_as=True)
これが私の管理者です:
class calendarAdmin(admin.ModelAdmin):
list_display = ('title','start','end')
admin.site.register(CalendarEvent, calendarAdmin)
最後に、これが私のテンプレートの関連部分です。
{% for e in events %}
{% url Calendar.views.download_handler pk=e.pk as fallback_url %}
<a href="{% firstof e.file|public_download_url fallback_url %}">Download</a>
{% endfor %}
{% firstof e.file|public_download_url fallback_url %} は空白を返すだけです。どこが間違っているのかわかりません。