python - 如何在 Django 视图中渲染对象?
问题描述
我有一个接受 URL 的表单。然后使用 BS4 解析此 URL,并使用以下类创建产品:
class Product(models.Model):
product_id = models.CharField(max_length=50)
pub_date = models.DateTimeField(default=datetime.now)
title = models.CharField(max_length=255)
url = models.TextField()
price = models.FloatField()
我只想将独特的产品保存到数据库中。因此,我将以下代码添加到views.py文件中的add函数中,以通过产品 ID 来检查产品:
def add(request):
...
product.product_id = soup.find('h1', class_='product-id').text
if Product.objects.filter(product_id=product.product_id):
return render(request, 'product/add.html', {'error': 'Product already exists'})
else:
product.title = soup.find('h1', class_='product-name').text
...
product.save()
return redirect('/product/' + str(product.id))
目前,用户收到“产品已存在”错误消息。但我想实际渲染已经存在的产品。这是详细产品的功能:
def detail(request, product_id):
product = get_object_or_404(Product, pk=product_id)
return render(request, 'product/detail.html', {'product': product})
详细产品的 URL 如下所示:http ://example.com/product/22 可能有更好的方法来检索、比较然后呈现对象。请告诉我。提前致谢!
解决方案
您可以直接重定向到产品定义的 get_absolute_url 属性吗?
def add(request):
...
product.product_id = soup.find('h1', class_='product-id').text
existing_product = Product.objects.filter(product_id=product.product_id)
if existing_product:
return redirect(existing_product.get_absolute_url())
推荐阅读
- scrapy - Scrapy 暂停和恢复抓取,结果目录
- php - 我正在尝试向此 PHP 代码添加一个时间变量,但它不起作用
- django - 如何在 Django 中授予权限?
- ruby-on-rails - 在 Rails 中查询项目时带上用户名
- java - 试图理解整数数组中的 charAt 方法
- sql-server - 没有括号的数学计算的运算顺序是错误的
- c++ - 我是否应该在 C++ 竞争性编程中输入输入的循环中工作
- c - 为什么减去的内存地址数小于预期?
- authentication - 在 https://smtpjs.com 上使用 SMTP 凭证加密器是否安全?
- postgresql - 备份在 Digital Ocean 上的容器中运行的 PostgreSQL 数据库