Python 如何在Django中使用重定向功能发送字典数据

Python 如何在Django中使用重定向功能发送字典数据,python,django,python-3.x,Python,Django,Python 3.x,我正在尝试通过重定向方法发送字典。但无法在重定向模板中获取它。我试图像在渲染函数中传递字典一样传递字典,但我认为这样做不对。我也尝试了HttpResponseRedirect,但那也不起作用。我犯了一个奇怪的错误 NoReverseMatch at / views.py def index(request): if request.method == "POST": url = request.POST.get('url', '') r = req

我正在尝试通过重定向方法发送字典。但无法在重定向模板中获取它。我试图像在渲染函数中传递字典一样传递字典,但我认为这样做不对。我也尝试了HttpResponseRedirect,但那也不起作用。我犯了一个奇怪的错误

NoReverseMatch at /
views.py

def index(request):
    if request.method == "POST":

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

        r = requests.get(url)
        soup = BeautifulSoup(r.content, features="lxml")
        p_name = soup.find_all("h2",attrs={"class": "a-size-mini"})
        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}

        return redirect('data', dec)

    return render(request, 'index.html')
url.py

from django.urls import path, include
from . import views

urlpatterns = [
    path('', views.index, name="index"),
    path('upload',views.upload,name='upload'),
    path('data',views.data,name='data')
]

如果要使用
redirect()
方法并将dict传递给另一个视图函数,可以执行类似的操作

def索引(请求):
...        
dec={'name':name_data,'price':price_data,'image':image_data,'url':url}
返回重定向(“数据”,kwargs=dec)
...
然后,您需要具有用于重定向接受参数的view函数
**kwargs
确保更改
url.py

def数据(请求,**kwargs):
//使用**kwargs并使用dict呈现模板。
如果要从url获取参数作为查询参数。 您可以在
redirect()
方法中使用直接URL

从django.url反向导入
导入urllib.parse
def索引(请求):
...
dec={'name':name_data,'price':price_data,'image':image_data,'url':url}
url='{}?{}'。格式(反向('data'),urllib.parse.urlencode(dec))#/data/?name=abc&price=45。。
返回重定向(url)
然后使用参数

def数据(请求):
name=request.GET.GET('name')
#在这里做点什么

对于带有关键字参数的“数据”仍然会出现错误
反向
您还需要更改
url.py
。你能在你的问题中添加
url.py
吗是的url.py现在存在你想在url参数中添加dict键吗?例如:
xyz.com/?name=sdf&price=23
这可能吗?因为在dict中,name是name_数据的键,它是一个列表,几乎包含16个值。你能给我们看看url.py吗?必须有一个名为“数据”的url,否则将不会work@SammyJ请现在检查,也许你必须在url.py的末尾添加一个
/
,就像他们在这里提到的,(),它现在可以工作了吗?