【问题标题】:how to read my files in template, django model filefield如何在模板中读取我的文件,django 模型文件字段
【发布时间】:2021-07-01 20:41:16
【问题描述】:

我为我的 pdf 文件创建了两个按钮,一个用于阅读,一个用于下载。我的下载按钮有效,但我不知道如何使用读取按钮打开文件。 我可以像下载按钮那样做吗?或者有什么特殊的方法可以打开文件

models.py

​​>
class Books(models.Model):
    author = models.ManyToManyField(Author)
    title = models.CharField(max_length=250)
    image = models.ImageField(upload_to='pics/cover/', default='pics/default-cover.jpg')
    pdf_files = models.FileField(upload_to='pdfs/books/', default='pdfs/default-pdf.pdf')

    def __str__(self):
        return self.title

forms.py

​​>
class BookForm(ModelForm):
    class Meta:
        model = Books
        fields = '__all__'

settings.py

​​>
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py

​​>
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.contrib.staticfiles.urls import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('book.urls')),
]

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

detail.html

<div class="row">

   <a href="{{ books.pdf_files.url }}"><button class="btn btn-outline-success">Download</button></a>
   <a href=""><button class="btn btn-outline-primary">Read</button></a>

</div>

views.py

​​>
def detailView(request, id):
    books = Books.objects.get(pk=id)

    context = {
        'books': books
    }

    return render(request, 'detail.html', context)

def addBooks(request):
    form = BookForm()
    if request.method == 'POST':
        form = BookForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('allbooks')

    context = {
        'form': form
    }
    return render(request, 'books_form.html', context)

【问题讨论】:

    标签: python django django-models django-templates


    【解决方案1】:

    你可以试试:

    <embed src="{{ books.pdf_files.url }}" width="800px" height="2100px" />
    

    我将在您的页面中显示 PDF。

    为了更好的可读性,您应该创建一个包含 PDF 的新页面

    【讨论】:

    • 我试过了,它和 标签一样,它会自动下载文件,但我想打开文件
    【解决方案2】:

    我找到了解决方案,我卸载了 idm(Internet 下载管理器)并且我的文件正常打开了。 要下载我只是把下载放在href前面。 谢谢你的回答

    detail.html

    <div class="row">
    
       <a download href="{{ books.pdf_files.url }}"><button class="btn btn-outline-success">Download</button></a>
       <a href="{{ books.pdf_files.url }}"><button class="btn btn-outline-primary">Read</button></a>
    
    </div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 2012-06-14
      • 2020-07-07
      • 2011-03-12
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多