2017-05-17 7 views
0

pdfファイルをdjango Admin側からアップロードしようとしています。そのため、ユーザーはウェブサイトに登録してからフロントエンドからダウンロードできます。このタスクのサードパーティ製パッケージ。一般ユーザーがフロントエンドからダウンロードできるようにDjango Adminからpdfファイルをアップロードする

注: プロジェクト構造:

── myproject/ 
     ├── __init__.py 
     ├── settings/ 
     ├── urls.py 
     │__ wsgi.py 

    ── myapp/ 
    └──| __init__.py 
     |__ admin.py 
     |__ apps.py 
     |__ forms.py 
     |__ models.py 
     |__ tests.py 
     |__ urls.py 
     |__ views.py 

    ── media_cdn/ 
    ├── static 
      |__ media 

    ── static/ 
     ├── css 
     └── js 
     |__ media 

    ── templates 
     |__ index.html 

でmyproject/settings.py

私は

編集をジャンゴに新しいです

STATIC_URL = '/static/' 

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "static") 
    ] 
MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_cdn') 

のMyApp/models.py

class My_model(models.Model): 
    title = models.CharField(max_length=25) 
    pdf = models.FileField(upload_to='static/media') 


    def __str__(self): 
     return self.title 

のMyApp/urls.py

urlpatterns = [ 
    url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'), 

    url(r'^download/(?P<path>.*)$', serve, {'document root': settings.MEDIA_ROOT}), 

    ] 

if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

のMyApp/admin.py

from accounts import models 

admin.site.register(models.My_model) 

myappに/ views.py

def download(request, path): 
    file_path = os.path.join(settings.MEDIA_ROOT, path) 
    if os.path.exists(file_path): 
     with open(file_path, 'rb') as fh: 
      response = HttpResponse(fh.read(), content_type="application/pdf") 
      response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path) 
      return response 
    raise Http404 

index.htmlを

<a href="{{ my_Model_instance.pdf.url }}" download>Click here to download PDF</a> 

私はそれが同じようにページ全体をダウンロードするフロントエンド上のリンクをクリックしてくださいHTMLファイルあなたが作成する必要があり、それはダウンロード(しかし、ここで問題がmy_Modelアップロードがmedia_cdn/static/media/django adminからファイルです)(例としてtest123.pdfをダウンロードするための)Iハードコードurl

<a href="/static/media/test123.pdf" download>Click here to download PDF</a> 

しかし、

答えて

0

モデル:admin.pyから

class My_model(models.Model): 
    pdf = models.FileField(upload_to='special location or name') 

from django.contrib import admin 
from my_app import models 

admin.site.register(models.My_model) 

と、ビューでのようにアクセスすることができます

<a href="{{ my_Model_instance.pdf.url }}">Click here to download PDF</a> 
+0

はあなたの方法が、その示す 'OperationalError' 'NOなどtable'エラーをしようとしました。 –

+0

あなたは 'python manage.py makemigrations'と' python manage 'とタイプする必要があります。py migrate' – MaximeK

+0

テンプレート内のリンクClick here to download PDFをクリックしても何も起こりません。 –

関連する問題