Вернуть ответ на скачивание файла в Django - PullRequest
0 голосов
/ 09 октября 2019

Я новичок в Django и создаю приложение, которое может собирать данные о продуктах из Amazon. Я могу получить данные, теперь я хочу загрузить их как файл CSV, но моя логика не работает. Я создал две формы в index.html, одна из них предназначена для получения данных, а другая - для загрузки файла. Первая форма работает правильно, но не понимает, что не так с логикой загрузки или формой.

views.py

def index(request):

    if request.method == "POST":

        url  = request.POST.get('url', '')
        down = request.POST.get('download','')

        r = requests.get(url)
        soup = BeautifulSoup(r.content, features="lxml")
        p_name = soup.find_all("h2",attrs={"class": "a-size-mini a-spacing-none a-color-base s-line-clamp-2"})
        p_price = soup.find_all("span",attrs={"class": "a-price-whole"})
        p_image = soup.findAll('img', {'class':'s-image','src':re.compile('.jpg')})

        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="product_file.csv"'


        for name,price,image in zip(p_name,p_price,p_image):
            writer = csv.writer(response)
            row = writer.writerow([image['src'],name.text, price.text,])

            name_data  = [data.text for data in p_name]
            price_data = [data.text for data in p_price]
            image_data = [data['src'] for data in p_image]
            dec = {'name':name_data, 'price':price_data, 'image':image_data, 'url':url}

        if down:
            return response


    else:
        dec = {}

    return render(request, 'index.html',dec)

index.html

     {% extends 'base.html' %}
     {% block title %}Amazone Scraper{% endblock %}
     {% block content %}
    <div class="col-md-6">
      {% if name %}
        <form action="" method="POST">{% csrf_token %}
          <input type="text" id="url" name="url" class="form-control" value="{{url}}" placeholder="URL" required autofocus>
          <p class="mt-1 text-light"> Download Your Scraped File</p>
          <button type="submit" class=" btn btn-info btn-lg" type="submit" id="download" name='download'>Download</button>
        </form>
        <p class="mt-3 text-light"><a href="upload" class="text-info font-weight-bold font-italic">Upload</a> Your File To The Database</p>
      {% else %}
        <form method="POST" action="">{% csrf_token %}
            <h1 class="mb-3 display-4 text-light">Amazon Scraper</h1>
            <input type="text" id="url" name="url" class="form-control" placeholder="URL" required autofocus>
            <div class="row justify-content-md-center">
              <button class="mt-3 col-md-3 btn btn-lg btn-info btn-block " type="submit" id="submit" name='submit'>Scrap</button>
            </div>
        </form>   
      {% endif %}
    </div>
    <div class="row mt-5">
    <div class="col-md-4 drawr">
      {% for image in image %}
        <img style="height: 90px; " src="{{image}}" alt=""><br>
      {% endfor %}
    </div>
    <div class="col-md-4 drawr">
      {% for name in name %}
        <p class="text-light" style="margin: 20px 0 !important;">{{name}}</p><br>
      {% endfor %}
    </div>
    <div class="col-md-4 drawr">
      {% for price in price %}
        <p class="text-light" style="margin: 22px 0 !important;">{{price}}</p><br>
      {% endfor %}
    </div>
</div>
</div>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...