как читать мои файлы в шаблоне, файловое поле модели django

avatar
fulldropi
1 июля 2021 в 20:41
290
2
0

Я создал две кнопки для своих 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)
Источник

Ответы (2)

avatar
fulldropi
2 июля 2021 в 14:46
0

Я нашел решение, я удалил idm (Internet Download Manager), и мои файлы открываются нормально. Чтобы скачать, я просто поставил «скачать» перед 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>
avatar
Gaëtan GR
2 июля 2021 в 08:21
0

Вы можете попробовать это :

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

Я покажу PDF на вашей странице.

Для лучшей читабельности вам следует создать новую страницу с PDF-файлом внутри нее

fulldropi
2 июля 2021 в 14:13
0

Я попробовал это, и он делает то же самое, что и тег <a href=""> </a>, он автоматически загружает файл, но я хочу открыть файл