Передача переменной из одного метода в другой в python / django - PullRequest
1 голос
/ 25 января 2020

Я хочу передать переменную из метода details в метод загрузчика и выполнить операции. Я пробовал несколько методов, но не работал

Views.py

from django.shortcuts import render
import pytube
from .forms import VideoDownloadForm
# Create your views here.


def details(request):
    if request.method == 'POST':
        form = VideoDownloadForm(request.POST, request.FILES)
        if form.is_valid():
            f = form.cleaned_data['Url']  
            yt = pytube.YouTube(f) # <-----Pass this 'yt' from here
            thumb = yt.thumbnail_url
            title = yt.title
            return render(request, 'ytdownloader/details.html', {'title': title, 'thumbnail': thumb})
    else:
        form = VideoDownloadForm()
    return render(request, 'ytdownloader/front.html', {'form': form})


def downloader(request): #<----to this method
    videos = yt.streams.filter(progressive=True, type='video', subtype='mp4').order_by('resolution').desc().first()
    videos.download('C:\\Users\\user\\Downloads')
    return render(request, 'ytdownloader/details.html')

подробности. html

{% extends 'ytdownloader/base.html'%}
{% block content%}
<h1> {{title}}</h1>
<a  href="{{thumbnail}}"><img src="{{thumbnail}}" alt=""></a>
<a href="{% url 'download'%}"><button type="submit" class="btn btn-primary ">Download</button></a>
{%endblock%}

1 Ответ

0 голосов
/ 25 января 2020

функциональные представления действуют подобно Python функциям в django, поэтому, если вам нужна переменная (в данном случае yt), вы должны передать ее в функцию; Вы также можете вызвать представление downloader с его аргументами из представления details:

def details(request):
    if request.method == 'POST':
        form = VideoDownloadForm(request.POST, request.FILES)
        if form.is_valid():
            f = form.cleaned_data['Url']  
            yt = pytube.YouTube(f)
            <b>downloader(request, yt)</b>
    else:
        form = VideoDownloadForm()
    return render(request, 'ytdownloader/front.html', {'form': form})


def downloader(request, <b>yt</b>):
    videos = yt.streams.filter(progressive=True, type='video', subtype='mp4').order_by('resolution').desc().first()
    videos.download('C:\\Users\\user\\Downloads')
    <b>thumb = yt.thumbnail_url
    title = yt.title</b>
    return render(request, 'ytdownloader/details.html', <b>{'title': title, 'thumbnail': thumb}</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...