Python 如何在Django中使用重定向功能发送字典数据
我正在尝试通过重定向方法发送字典。但无法在重定向模板中获取它。我试图像在渲染函数中传递字典一样传递字典,但我认为这样做不对。我也尝试了HttpResponseRedirect,但那也不起作用。我犯了一个奇怪的错误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
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的末尾添加一个/
,就像他们在这里提到的,(),它现在可以工作了吗?