Ошибка NoReverseMatch для страницы загрузки файла - PullRequest
1 голос
/ 18 июня 2020

Я работаю над django веб-приложением. Здесь веб-приложение создает фрейм данных pandas при отправке формы. Этот фрейм данных хранится в каталоге root. У меня есть другое представление, которое используется для загрузки сгенерированного файла csv. Но когда я перенаправляюсь на страницу загрузки, я получаю ошибку «Нет обратного совпадения».

это мой код на данный момент

def randomfilename(stringLength=8):
    lettersAndDigits = string.ascii_letters + string.digits
    return ''.join(random.choice(lettersAndDigits) for i in range(stringLength))

def generate_dataframe(request):
    if request.method == 'POST':
        ...
        df = pd.DataFrame(columns=cols)
        df['title'] = title_lst
        df['link'] = product_links[:1]

        fn = randomfilename()
        df.to_csv('./'+fn+'.csv')
        return redirect("download_file", filename = fn)

def download_file(request, filename):
    if request.method == 'POST':

        file_path = './'+filename

        file = open(file_path, 'r')
        mime_type, _ = mimetypes.guess_type(file_path)
        response = HttpResponse(file, content_type=mime_type)
        response['Content-Disposition'] = "attachment; filename=%s" % filename

        return response

urls.py проекта

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

scraper urls.py

urlpatterns = [
    path('generate', views.generate_dataframe, name='generate_dataframe'),
    path('download/<filename>/', views.download_file, name='download_file'),
]

Я знаю, что где-то испортил URL. Но я не знаю, как исправить эту проблему. Пожалуйста, помогите мне. Заранее спасибо.

1 Ответ

2 голосов
/ 18 июня 2020

Попробуйте это:

В ваших представлениях

from django.urls import reverse

def generate_dataframe(request):
    ...
return redirect(reverse('download_file', kwargs={'filename': fn}))

В вашем urls.py:

urlpatterns = [
    ...
    path('download/<str:filename>/', views.download_file, name='download_file'),
]

В вашем шаблоне:

{% url 'download_file' filename %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...