Python 如何将上下文结果作为参数传递给django中的另一个函数?

Python 如何将上下文结果作为参数传递给django中的另一个函数?,python,django,django-views,django-templates,youtube-dl,Python,Django,Django Views,Django Templates,Youtube Dl,我有我的django应用程序,它搜索youtube并返回结果作为字典,我在模板中呈现它们,其中一个返回值是link,现在我有了一个下载按钮,我希望它的功能是,每当你点击一个按钮时,它应该将点击结果的url作为参数传递给另一个下载函数。我如何做到这一点 这是我的看法 def index(request): if request.method == 'POST': query = request.POST['video_name'] n = 12 search = Sear

我有我的django应用程序,它搜索youtube并返回结果作为字典,我在模板中呈现它们,其中一个返回值是link,现在我有了一个下载按钮,我希望它的功能是,每当你点击一个按钮时,它应该将点击结果的url作为参数传递给另一个下载函数。我如何做到这一点

这是我的看法

def index(request):

if request.method == 'POST':
    query = request.POST['video_name']
    n = 12
    search = SearchVideos(str(query), offset = 1, mode = "json", max_results = n)

    ytresults = search.result()

    result_dict = json.loads(ytresults)        

    context = {
        "result" : result_dict,
    
            
    }
    template_name = "youloader/results.html"
    return render(request, template_name, context)

else:
    query = "no copyright sound"
    n = 12

    search = SearchVideos(str(query), offset = 1, mode = "json", max_results = n)

    index_results = search.result()

    result_dict = json.loads(index_results)

    context = {
        "result" : result_dict
    }

    template_name = "youloader/index.html"
    return render(request, template_name, context)

    

def downloading_video(request):
   try:
   with youtube_dl.YoutubeDL(video_opts) as ydl:
       ydl.download(link)

except:
   pass
这是我的template.html

<div class="my-4" >
<div style="padding-top: 20px">
<div class="row" >
{%  for result in result.search_result %}
<div class="col-12 col-sm-6 col-md-4 col-lg-4">
<div class="card shadow-sm border-0 my-2">
<img src="{{ result.thumbnails.1 }}" alt="{{ result.channelId }}">

<div class="card-body">
    <h5 class="card-title">{{ result.link }}</h5>
    <div class="d-flex flex-wrap justify-content-between card-subtitle my-2 text-muted small">
        

        <a href="{{ result.link }}" class="text-secondary font-weight-bold">
            <i class="fa fa-tablet mr-1"></i>{{ result.channel }}
        </a>

        <span><i class="fa fa-stopwatch mr-1"></i>{{ result.duration }}</span>

        <span><i class="fa fa-eye mr-1"></i>{{ result.views }}</span>
        <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown">Download</button>

        <div class="dropdown-menu">
            <a class="dropdown-item" href="#">Audio</a>
            <a class="dropdown-item" href="#">Video</a>
        </div>

        <br>

    </div>
</div>
</div>

</div>
{% endfor %}
</div>
</div>
</div>

{result.search_result%}
{{result.link}
{{result.duration}
{{result.views}
下载

{%endfor%}
下面是呈现的模板示例


在索引函数中,可以使用重定向而不是渲染

索引函数:

def index(request):

if request.method == 'POST':
    .
    .
    .
    result_dict = json.loads(index_results)
    link = result_dict.link
    return redirect('youtubedl:download', link ) # first arg is your url route to downloading_video function like 'appname:urlname' and second is the link that coming from result_dic


else:
    .
    .
def downloading_video(request, link):
    try:
    with youtube_dl.YoutubeDL(video_opts) as ydl:
        ydl.download(link)

    except:
       pass
下载视频功能:

def index(request):

if request.method == 'POST':
    .
    .
    .
    result_dict = json.loads(index_results)
    link = result_dict.link
    return redirect('youtubedl:download', link ) # first arg is your url route to downloading_video function like 'appname:urlname' and second is the link that coming from result_dic


else:
    .
    .
def downloading_video(request, link):
    try:
    with youtube_dl.YoutubeDL(video_opts) as ydl:
        ydl.download(link)

    except:
       pass

这是我认为您应该使用的方式,因为您的下载功能位于一个单独的模板中

您想导出从索引功能到下载视频功能的链接吗?是的,这正是我想要的@通过调用downloading_video()重新定义要启动下载的URL。当按下按钮时,发布下载链接到它。如果我返回重定向,我将无法获得希望用户根据结果选择的预览。我希望它能像youtube一样工作,但不是播放视频,而是下载按钮。你能解释更多吗。您希望在何时何地显示下载按钮,并解释您希望用户在何时何地开始下载?我附上了屏幕截图,显示了在向用户显示搜索结果后按钮的位置,然后他/她将选择要下载的视频这些结果是从youtube获得的,而不保存在数据库中?换句话说,只是显示?是,不涉及数据库,它们只是从视图返回